vue+element ui中动态实现级联选择器 el-cascader踩过的坑

实现效果图

vue+element ui中动态实现级联选择器 el-cascader踩过的坑_第1张图片

实现方法

html
vue+element ui中动态实现级联选择器 el-cascader踩过的坑_第2张图片
备注 :props 可初始化一些字段; change事件可以获取所需要的value 值
js
vue+element ui中动态实现级联选择器 el-cascader踩过的坑_第3张图片
获取动态数据并赋值所需要的数组
vue+element ui中动态实现级联选择器 el-cascader踩过的坑_第4张图片
这样就基本实现了级联选择器,但是坑来了

描述

当级联选择器内容需要动态变化时,会爆出Cannot read property ‘level’ of null错误(如果没有选择就不会报错的)
vue+element ui中动态实现级联选择器 el-cascader踩过的坑_第5张图片

分析

这个错误的原因是当选择后,再更新内容时,选择器仍会关联原来的数据,导致找不到之前选择的元素。

解决

所以可以采用 重新渲染 的方式解决这个问题。
vue+element ui中动态实现级联选择器 el-cascader踩过的坑_第6张图片
vue+element ui中动态实现级联选择器 el-cascader踩过的坑_第7张图片

查看完整代码

html


		 
 

js

 data() {
    return {
      defaultProps: {
        children: "children",
        label: "name",
        value:"id"
      },
      form: {
        itemId: "",
      },
      catoArr: [ ],
      refreshItem:0,  // 重新渲染级联选择器
    };
methods:{

getRepairItem(val) {
      this.$http
        .post("/callcenter/maintainForm/getMaintainItemList", {
          communityId: this.currentProject.id,
          formType: val
        })
        .then(res => {
          console.log(res);
          if (res.data.code == 100) {
            this.refreshItem++;
            this.catoArr = res.data.result;
          }
        });
    }
}

说明
  • 通过clearable 设置输入框可清空, 因为选择器没有显示全部的地方,所以如果作为筛选来讲,可以添加清空属性使得字段值变为空,从而查到全部

在这里插入图片描述

  • 属性show-all-levels定义了是否显示完整的路径,将其赋值为false则仅显示最后一级

vue+element ui中动态实现级联选择器 el-cascader踩过的坑_第8张图片

  • 关于elementUI中cascader选中值后,能获取value或者label,但不能同时获value和label,解决方法如下:
    先定义一下组件中的 ref
    在这里插入图片描述
    this.$refs['cascaders'].getCheckedNodes()[0].label  // 即可获取label值
    

跳坑完美结束~

你可能感兴趣的:(vue)