欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > vue2如何二次封装表单控件如input, select等

vue2如何二次封装表单控件如input, select等

2025/4/30 4:47:29 来源:https://blog.csdn.net/csl784513390/article/details/147479239  浏览:    关键词:vue2如何二次封装表单控件如input, select等

需求

项目需要做一个城市选择器,数据来源公司的后端,要求用级联选择,使用的el-cascader

思路

二次封装要尽可能保留原有的组件prop,用法尽量保持和el-cascader一致,所以采用透传的方式传递prop

<template><div class="container" ><el-cascader:options="areaOptions"style="width: 100%"clearableref="cascader":value="value"@input="handleChange"v-on="$listeners"v-bind="$attrs"/></div>
</template>
<script>
import { findListByParentId } from '@/api/area/area'
export default {name: 'regionCascader',props: {value: {type: Array,default: () => []},disabledFunc: {// 这里是判断选项是否禁用的方法type: Function,default: (opts, level) => {return false}}},data() {return {options: []}},computed: {areaOptions() {const setOptions = (opts, level) => {return opts.map(opt => {if (opt?.children?.length) {opt.children = setOptions(opt.children, level + 1)}const param = {...opt,value: opt.id,label: opt.areaName,disabled: this.disabledFunc(opt, level)}return param})}return setOptions(this.options, 0)}},mounted() {this.getList()},methods: {handleChange(e) {this.$emit('input', e)},getList() {// 这里放获取数据的逻辑},getCheckedNodes() {return this.$refs.cascader.getCheckedNodes()}}
}
</script>
<style scoped>
.container{width: 100%;
}
</style>

后话

在VUE2中 2.6版本以后可以改为如下,去掉划线代码
在这里插入图片描述
在2.6版本以前,$attrs是不会获取到value字段,所以导致透传不进去,必须显示声明props.value

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词