当前位置: 首页 > news >正文

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

相关文章:

  • 空闲列表:回收和再利用
  • Java发展史及版本详细说明
  • Postgresql源码(143)统计信息基础知识(带实例)
  • 中心极限定理(CLT)习题集 · 答案与解析篇
  • SpringSecurity源码解读AbstractAuthenticationProcessingFilter
  • Gazebo 仿真环境系列教程(一):环境安装与基础使用
  • vscode vue文件单行注释失效解决办法
  • JVM性能优化之年轻代参数设置
  • 抗体工程改造系列:调节抗体功能的Fc改造
  • 编译原理(5):链接
  • 今日CSS学习浮动->定位
  • 数据分析案例:医疗健康数据分析
  • 机器学习(8)——主成分分析
  • Restful接口学习
  • [密码学实战]在Linux中实现SDF密码设备接口
  • 密码学的hash函数,哈希碰撞, collision resistance, BTC用到的SHA-256简介
  • arm64适配系列文章-第十章-arm64环境上jenkins的部署
  • docker部署Jenkins工具
  • PTA -L1-001 Hello World
  • 联邦知识窃取模型(FedBM):从预训练语言模型中窃取知识以实现异构联邦学习|文献速递-深度学习医疗AI最新文献
  • 一周文化讲座|“不一样的社会观察”
  • 陕西省烹饪餐饮行业领军人物黄建军逝世,终年53岁
  • 中国牵头制定,在线旅游机构和展览与活动领域ISO国际标准发布
  • 解放军报社论:谱写新时代双拥工作崭新篇章
  • 小鹏机器人IRON亮相上海车展,何小鹏:相信更多人形机器人会现身车展
  • 马上评丨电子屏不如黑板?解决问题不能靠怀旧