Element UI 级联选择器的动态加载用法

Element UI 级联选择器的动态加载用法

html 部分

         <el-cascader
          size="mini"
          clearable
          placeholder="请选择地址"
          @change="cascaderChange"
          v-model="searchForm.detailAddress"
          :props="cascaderProps"
        ></el-cascader> 

js部分 getAreaDict() 是数据源接口调用
数据格式如图,也可以是其他格式,视情况而定

 cascaderProps: {
        label: "name",
        value: "code",
        lazy: true,
        checkStrictly: true,
        lazyLoad(node, resolve) {
          const { level } = node;
          setTimeout(() => {
            if (node.level == 0) {
              //省
              getAreaDict().then((res) => {
                const cities = res.data.data.filter((item) => {
                  return item.level == "1";
                });
                resolve(cities);
              });
            }
            if (node.level == 1) {
              //市
              let a = node.value.substring(0, 2);
              getAreaDict().then((res) => {
                const cities = res.data.data.filter((item) => {
                  return item.level == "2" && item.code.substring(0, 2) == a;
                });
                resolve(cities);
              });
            }
            if (node.level == 2) {
              //区或县
              let a = node.value.substring(0, 4);
              getAreaDict().then((res) => {
                const cities = res.data.data.filter((item) => {
                  return item.level == "3" && item.code.substring(0, 4) == a;
                });
                cities.map((item) => {
                  item.leaf = true;
                  return item;
                });
                resolve(cities);
              });
            } else if (node.level > 2) {
              resolve([]);
            }
          }, 100);
        },
      }
当使用element ui时,可以使用`<el-cascader>`组件实现级联选择器。该组件支持通过异步加载数据来实现级联选择器动态加载。可以通过以下代码实现: ```vue <template> <el-cascader :options="options" :props="{ value: 'name', label: 'name', children: 'cities' }" @change="handleChange" v-model="selectedValues" clearable ></el-cascader> </template> <script> export default { data() { return { options: [ { name: "广东省", cities: [] }, { name: "湖南省", cities: [] } ], selectedValues: [] }; }, mounted() { // 初始化数据 this.loadData(0); this.loadData(1); }, methods: { loadData(index) { this.options[index].loading = true; // 模拟异步加载数据 setTimeout(() => { this.options[index].cities = this.getCityData(this.options[index].name); this.options[index].loading = false; }, 1000); }, getCityData(provinceName) { // 根据省份名称获取对应的城市数据 // 这里可以根据具体的需求进行修改 if (provinceName === "广东省") { return ["广州市", "深圳市", "珠海市"]; } else if (provinceName === "湖南省") { return ["长沙市", "株洲市", "湘潭市"]; } else { return []; } }, handleChange(value) { console.log(value); } } }; </script> ``` 在这段代码中,我们使用了`<el-cascader>`组件来实现级联选择器,通过`options`属性来设置选项数据,通过`props`属性来设置选项的属性名,通过`change`事件来监听选项变化。在`mounted`生命周期函数中,我们调用`loadData`方法来初始化数据。`loadData`方法中使用了`setTimeout`来模拟异步加载数据,并在加载完成后将城市数据设置到对应的省份选项中。在`handleChange`方法中,我们可以获取到用户选择的值。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值