实现效果图

blog.csdnimg.cn/20201130164917746.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NDkwNzUw,size_16,color_FFFFFF,t_70)

实现方法

html
在这里插入图片描述
备注 :props 可初始化一些字段; change事件可以获取所需要的value 值
js
在这里插入图片描述
获取动态数据并赋值所需要的数组
在这里插入图片描述
这样就基本实现了级联选择器,但是坑来了

描述

当级联选择器内容需要动态变化时,会爆出Cannot read property ‘level’ of null错误(如果没有选择就不会报错的)
在这里插入图片描述

分析

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

解决

所以可以采用 重新渲染 的方式解决这个问题。
在这里插入图片描述
在这里插入图片描述

查看完整代码

html

<el-form-item label="维修项目" size="mini">
		 <el-cascader
		     :key="refreshItem"
		     v-model="form.itemId"
		     :options="catoArr"
		     clearable
		     :props="defaultProps"
		     @change="getCato"
		     :show-all-levels="false"
		   ></el-cascader>
 </el-form-item>

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则仅显示最后一级

在这里插入图片描述

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

跳坑完美结束~

Logo

前往低代码交流专区

更多推荐