element-ui 级联组件踩坑 Cascader

3,088 阅读1分钟
2种情况:
情况1:返回数据是1次性的。
情况2:返回数据是懒加载的。
html:

cascader_2.jpg

配置数据:

cascader_3.jpg

情况1:

  1. 通过options配置数据
  2. 通过props 配置 数据相关字段,否则不能显示。 element-ui对应字段value,label,children.关键3个字段
  3. 获取数据,给options赋值。(这时候已经可以使用,但是有个小BUG 最后1个菜单会显示空,这是因为后台返回数据中children是空数组,我们只需要通过 递归 将数据中children为空的数据赋值为undefined即可) cascader.jpg 在获取数据时使用:

cascader_1.jpg 这样就解决了。

情况2:懒加载。
  1. 在props中设置 lazy:true,lazyload()函数(此函数是关键)
  2. 官方给出的例子: element.eleme.cn/#/zh-CN/com…
//基本上lazyload函数这样写,具体根据后台返回数据处理。
//有可能最后1级的data为空,或者其他会报 forEach is not a function。
//根据具体数据调整。 设置 数据的 leaf 属性为true,就不会继续渲染。
lazyLoad(node, resolve) {
      const { level } = node;
      getCity().then((res) => {
        let data = res.data;
        if (level == 1) {
          //第一级菜单点击后做一些事情,比如每次返回数据的value,label对
          //不上,在这可以改变
        } else if (level == 2) {
          //第二级菜单点击后
          data.forEach((item) => {
            item.leaf = levle >= 2;
          });
        }
        resolve(nodes); //返回数据 共3级菜单。如果还有就继续 level 增加判断。
      });
    }
写在最后:
  • 记录下这次的踩坑,懒加载因为免费api使用次数上线,没有调整完美。
  • 但是,1次性返回数据的情况,即 情况1 已经解决。