el-cascader 的懒加载很容易,配置下 lazyload 回调函数就成了 但懒加载有点儿猫腻,瞅了一眼源码,发现人家已经实现了,而且很好用 保存以下文件到 index.vue,跑起来。。。

<template>
  <div class="dashboard-editor-container">
    <el-cascader
      :props="cascaderProps"
      clearable
      style="width: 100%"
      v-model="activeUserCode"
    >
    </el-cascader>
  </div>
</template>
<script>
let serverData = {
  root: [
    {
      value: "a",
      label: "a节点",
      leaf: false,
    },
    {
      value: "c",
      label: "c节点",
      leaf: false,
    },
  ],
  a: [
    {
      value: "b",
      label: "a的子节点b",
      leaf: false,
    },
    {
      value: "x",
      label: "a的子节点x",
      leaf: true,
    },
  ],
  b: [
    {
      value: "d",
      label: "d节点",
      leaf: true,
    },
  ],
};

export default {
  name: "lazySelector",
  data() {
    return {
      activeUserCode: ["a", "b", "d"],
      cascaderProps: {
        multiple: false,
        value: "value",
        label: "label",
        children: "children",
        lazy: true,
        lazyLoad(node, resolve) {
          console.log(node.value);
          if (node.root) {
            setTimeout(resolve, 0, serverData.root);
          } else {
            setTimeout(resolve, 0, serverData[node.value]);
          }
        },
      },
    };
  },
};
</script>

一切完美了,but 有瑕疵,我们的 value 一般情况是通过接口异步获取的, 所以难免延迟赋值 这样就没法驱动 el-cascader 动态反显(组件非常偷懒的去只加载第一层数据),所以的,我 们的反显出 bug 了,失效了,解决办法有两个

第一种

// 添加一个 ready 属性给  el-cascader 的 v-if='ready'
// 让我们的 value 赋值之后再让 el-cascader 显示

第二种

// 添加一个 options 给 el-cascader
//  el-cascader options="options"
// 初始值设置为

options = [0];

// 异步加载 value 赋值之后调整下 options 的值 

options = [];
// 别问我为啥可以,问就是源码里这么写的骚操作,正好被我们利用

推荐使用第二种,需要我们手动的二次封装下这个组件,要不然这谁看得懂,受得了