element ui cascader级联选择器需要点击两下才回显 级联选择器使用lazyLoad动态渲染数据

1 篇文章 0 订阅

级联选择器使用lazyLoad动态渲染数据

以下为效果图:
在这里插入图片描述
写这个的时候 遇到了两个坑 1是最后一级显示暂无数据 2 是最后一级需要点击两下才会回显

以下是element官网给出的解释
在这里插入图片描述
显而易见 这个leaf是控制是否有子节点的关键因素,我刚开始试图通过更改>=xx来控制下一级是否显示,但是这样代码就十分繁琐,而我试着不带着这个属性,就会出现最后一级需要点击两次的效果,很不美观,看网上很多说回滚后数据给undefined,还有去掉v-model,这些方法尝试无果都想放弃的时候,我开始注意到还是得通过leaf这个属性来改变我的代码
下面展示一些 内联代码片

      <el-cascader
        clearable
        placeholder="请选择"
        :options="allSubCatList"
        :props="cascaderProps"
        @change="OptionChange"
      ></el-cascader>
  data() {
    return {
      allSubCatList: [],
      cascaderProps: {
        lazy: true, //开启动态加载
        lazyLoad: this.getData,
      },
    };
  },
 methods: {
    async getData(node, resolve) {
      let level = node.level;
      let nodes = [];
      let params = { cid: 0 }; //要传递给后端的参数,根据实际情况而定
      if (level !== 0) {
        params.cid = node.data.value;
      }
      //请求后端接口并回显
      await ShopCategory(params).then((res) => {
        nodes = Array.from(res.data.data).map((item) => ({
          value: item.id,
          label: `${item.name}`,
          level: item.level,
          leaf: item.is_leaf === true, //根据接口返回是否有子数据
        }));
        // 通过调用resolve将子节点数据返回,通知组件数据加载完成
        resolve(nodes);
      });
    },
  },

以上,在接口请求结束后,这边通过leaf是否显示来控制子节点,就完美避开上面所述得两个bug,不过需要后端接口提供布尔值,也就是是否有子节点的字段,现在的效果就是正常的选择和回显的啦

为了更方便参考,这里附带部分后端接口返回数据

[
    {
        "id": 36497,
        "name": "大码衬衫",
        "level": 3,
        "parent_id": 20245,
        "is_leaf": true,
        "enable": true
    },
    {
        "id": 36496,
        "name": "大码连衣裙",
        "level": 3,
        "parent_id": 20245,
        "is_leaf": true,
        "enable": true
    },
    {
        "id": 36498,
        "name": "大码牛仔裤",
        "level": 3,
        "parent_id": 20245,
        "is_leaf": true,
        "enable": true
    }
]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cascader 级联选择器的懒加载,一般是通过在 `load` 事件异步加载子选项实现的。当用户选择某一级选项时,会触发 `load` 事件,此时可以根据当前选的选项,请求后台数据获取下一级选项列表,然后更新 Cascader 的选项列表。 在懒加载时,如果需要回显已选的选项,可以通过 `lazy` 属性配合 `value` 属性实现。`lazy` 属性表示是否启用懒加载模式,`value` 属性表示级联选择器的选值,是一个数组。 以下是一个简单的示例: ```html <el-cascader v-model="selectedOptions" :options="options" :lazy="true" :value="selectedOptions" @load="handleLoad" ></el-cascader> ``` 在这个示例,`selectedOptions` 是一个数组,用于绑定级联选择器的值。`options` 是一个数组,表示级联选择器的选项列表。`lazy` 属性设置为 `true`,表示启用懒加载模式。`value` 属性设置为 `selectedOptions`,表示级联选择器的选值与 `selectedOptions` 绑定。 当用户选择某一级选项时,会触发 `load` 事件,此时会调用 `handleLoad` 方法,该方法需要异步请求后台数据,获取下一级选项列表,然后更新级联选择器的选项列表。在加载完成后,需要将 `selectedOptions` 设置为对应的数组,以便回显已选的选项。以下是一个简单的 `handleLoad` 方法示例: ```js methods: { async handleLoad(selectedOptions) { const res = await axios.get('/api/cascader', { params: { selectedOptions: selectedOptions } }) const options = res.data // 更新级联选择器的选项列表 this.$set(selectedOptions[selectedOptions.length - 1], 'children', options) // 回显已选的选项 this.selectedOptions = [...selectedOptions] } } ``` 在这个示例,`handleLoad` 方法异步请求后台数据,获取下一级选项列表,然后使用 `$set` 方法更新级联选择器的选项列表,最后将 `selectedOptions` 设置为对应的数组,以便回显已选的选项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值