使用vue建省级联动菜单 很简单

本文详细介绍了如何使用Element UI中的级联选择器组件,包括数据结构的定义、v-model绑定以及@change事件的使用。通过实例展示了如何构建一个包含多个省份及其下属城市的级联选择器,并解决了selectedOptions未定义的常见错误。
  <el-cascader
              :options="options"
              v-model="selectedOptions"
              @change="handleChange">
      </el-cascader>
      这是用el写的标签  因为放n个不确定的省级数据  所以建议用数组存放数据 
      标签写完了 可以写script 
      如下:
      options:[
                {
                    label:'湖北',
                    value:'湖北',
                    children:[
                        {label:'十堰',value:'十堰'},
                        {label:'武汉',value:'武汉'},
                        {label:'黄冈',value:'黄冈'}
                    ]
                },{
                label:'广东',
                    value:'广东',
                    children:[
                        {label:'南海',value:'南海'},{label:'广东',value:'广东'},{label:'深圳',value:'深圳'}
                    ]
                },
                {
                    label:'湖南',
                    value:'湖南',
                   children:[
                       {label:'长沙',value:'长沙'},
                       {label:'湘潭',value:'湘潭'},
                       {label:'岳阳',value:'岳阳'}
                   ]
                },{
                    label:'四川',
                    value:'四川',
                    children:[
                        {label:'成都',value:'成都'},
                        {label:'绵阳',value:'绵阳'},
                        {label:'德阳',value:'德阳'}
                        ]
                },{
                    label:'河南',
                    value:'河南',
                    children:[
                        {label:'郑州',value:'郑州'},
                        {label:'洛阳',value:'洛阳'},
                        {label:'开封',value:'开封'}]
                },{
                    label:'江西',
                    value:'江西',
                    children:[
                        {label:'南昌',value:'南昌'},
                        {label:'九江',value:'九江'},
                        {label:'吉安',value:'吉安'}]
                },{
                label:'特别行政区',
                    value:'特别行政区',
                    children:[
                        {label:'香港',value:'香港'},
                        {label:'澳门',value:'澳门'}
                    ]
                }
                ],
                如果你看懂了 ,就会发现特别简单  主要是格式  lable 和value 而children 指的就是 在省级下的城市 但是 这样运行的话  控制台就会报错 说selectedOptions  unfidend  所以  你应该在option前加一个 selectoptions =[]  这样就可以了  你们可以试试哦 要是还有问题的话 记得留言 有缘解释
Vue联动下拉菜单可以使用Vue的数据绑定和组件化思想来实现。具体操作如下: 1. 在父组件中定义一个数组,存储四联动数据。 2. 定义三个子组件,分别用来显示省、市、区的下拉菜单。 3. 在父组件中使用v-for指令遍历数组,将数据传递给子组件。 4. 在子组件中定义props属性,接受父组件传递过来的数据。 5. 在子组件的template中使用v-for指令遍历数据,渲染下拉菜单。 6. 在子组件的methods中定义一个change事件,用来触发父组件的数据更新操作。 具体代码如下: 父组件: ``` <template> <div> <province-select :provinces="provinces" @change="handleProvinceChange" /> <city-select :cities="cities" @change="handleCityChange" /> <district-select :districts="districts" @change="handleDistrictChange" /> </div> </template> <script> import ProvinceSelect from './ProvinceSelect.vue' import CitySelect from './CitySelect.vue' import DistrictSelect from './DistrictSelect.vue' export default { components: { ProvinceSelect, CitySelect, DistrictSelect }, data() { return { provinces: [ { id: 1, name: '北京市' }, { id: 2, name: '上海市' }, { id: 3, name: '广东省' } ], cities: [], districts: [] } }, methods: { handleProvinceChange(province) { this.cities = [ { id: 1, name: '北京市' }, { id: 2, name: '上海市' }, { id: 3, name: '广州市' } ] this.districts = [] }, handleCityChange(city) { this.districts = [ { id: 1, name: '东城区' }, { id: 2, name: '西城区' }, { id: 3, name: '黄浦区' }, { id: 4, name: '徐汇区' }, { id: 5, name: '天河区' }, { id: 6, name: '番禺区' } ] }, handleDistrictChange(district) { console.log(district) } } } </script> ``` 省级子组件: ``` <template> <div> <select v-model="selectedProvince" @change="handleChange"> <option value="">请选择省份</option> <option v-for="province in provinces" :key="province.id" :value="province">{{province.name}}</option> </select> </div> </template> <script> export default { props: { provinces: { type: Array, default: [] } }, data() { return { selectedProvince: null } }, methods: { handleChange() { this.$emit('change', this.selectedProvince) } } } </script> ``` 市子组件: ``` <template> <div> <select v-model="selectedCity" @change="handleChange"> <option value="">请选择城市</option> <option v-for="city in cities" :key="city.id" :value="city">{{city.name}}</option> </select> </div> </template> <script> export default { props: { cities: { type: Array, default: [] } }, data() { return { selectedCity: null } }, methods: { handleChange() { this.$emit('change', this.selectedCity) } } } </script> ``` 区子组件: ``` <template> <div> <select v-model="selectedDistrict" @change="handleChange"> <option value="">请选择区县</option> <option v-for="district in districts" :key="district.id" :value="district">{{district.name}}</option> </select> </div> </template> <script> export default { props: { districts: { type: Array, default: [] } }, data() { return { selectedDistrict: null } }, methods: { handleChange() { this.$emit('change', this.selectedDistrict) } } } </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值