700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > VUE ElementUI 下拉框组件(select)的封装

VUE ElementUI 下拉框组件(select)的封装

时间:2023-10-04 16:33:04

相关推荐

VUE ElementUI 下拉框组件(select)的封装

今天写一下elementUI中select组件的封装:以下面这个以可搜索的下拉框为例:

1.创建子组件:Select.vue

<template><div><el-select v-model="value" filterable :placeholder="'请选择'+select.name" @change="change"><el-optionv-for="item in select.data":key="item.value":label="item.label":value="item.value"></el-option></el-select></div></template><script>export default {name: "Select",props:{select:Object},data() {return {//value: this.select.result}},computed:{value:{get(){this.select.result && this.change(this.select.result)return this.select.result}}},methods: {change(val) {console.log(val);//方法:利用select对象把值传给父组件this.select.result = val//把二级子项的数据找到,并传给父组件let a = this.buildChild(val)console.log(a);this.$emit('erjichange',a)// this.select.chang && this.select.change(this.buildChild(val))},buildChild(val){let data = this.select.data.find(item=>{return item.value == val})return data.children}},}</script><style lang="scss" scoped></style>

2.父组件:

<template><div style="margin:20px"><!-- 下拉框组件的封装 --><Select :select="select" @erjichange="erjichange"></Select><Select :select="selectChild"></Select></div></template><script>import Select from "./Select.vue"import SelectTable from "./SelectTable.vue";export default {name: "SelectMain",components:{ Select, SelectTable },data() {return {selectChild:{result:"",name: "食物子项",data: []},select:{result:"选项1", //选中的valuename: "食物",// change: (data)=>{// console.log(data);// this.selectChild.data = data// },data: [{value: '选项1',label: '黄金糕',children: [{value: '选项1-1',label: '黄金糕1-1', },{value: '选项1-2',label: '黄金糕1-2',}]}, {value: '选项2',label: '双皮奶',children: [{value: '选项2-1',label: '双皮奶2-1', },{value: '选项2-2',label: '双皮奶2-2',}]}, {value: '选项3',label: '蚵仔煎',children: [{value: '选项3-1',label: '蚵仔煎3-1', },{value: '选项3-2',label: '蚵仔煎3-2',}]}, {value: '选项4',label: '龙须面'}, {value: '选项5',label: '北京烤鸭'}],},}},methods: {erjichange(data) {console.log(data);this.selectChild.result = ''this.selectChild.data = data}},}</script><style lang="scss" scoped></style>

页面效果:

这个例子是做了一个二级联动的效果,当第一个下拉框选择后,第二个下拉框的内容就确定了;

比较难懂的部分是:

子组件:

这所以加这行代码是为了,首次加载时,第一个下拉框有默认值的情况下第二个下拉框也有相应的默认值。

change(val) {console.log(val);//方法:利用select对象把值传给父组件this.select.result = val//把二级子项的数据找到,并传给父组件let a = this.buildChild(val)console.log(a);this.$emit('erjichange',a)//第二种方法触发父组件的change属性// this.select.chang && this.select.change(this.buildChild(val))},buildChild(val){let data = this.select.data.find(item=>{return item.value == val})return data.children}

父组件:

以上我是采用了两种触发父组件change方法的方法:一种是给的select对象添加change属性,二种是用子传父的$emit方法;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。