级联菜单入坑记

坑1:一个list进行遍历出多个级联菜单,可任意选则一级,编辑保存,之前数据无法选中 ;

坑2:如果第一次选中一个,编辑时选择只有一级数据的数据无法选中;

<div v-for="(item, k) in projectInfoForm.childExtractProInfoList" :key="k">
<el-col :sm="8">
                <el-form-item label="省市区选则:" required>
                  <el-cascader
                    v-model="item.proLocationArr"
                    :options="regionOptionsArea"
                    :props="propsadd"
                    clearable
                    style="margin-right: 10px"
                    :ref="'proLocationRef' + k"
                    :popper-class="`proLocationRef${k} domicile-cascader-radio`"
                    @change="changeProLoacation($event, k)"
                    @expand-change="bindEvent(`proLocationRef${k}`)"
                  ></el-cascader>
                </el-form-item>
              </el-col>
</div>

1:可通过 props.checkStrictly = true 来设置父子节点取消选中关联,从而达到选择任意一级选项的目的。
2:ref 保证遍历出来的每个级联菜单是唯一 动态级联菜单 :ref="'proLocationRef' + k"
3:popper-class 自定义浮层类名,我这里用来去掉前边的单选按钮,点击label选中
4:expand-change:当展开节点发生变化时触发 回调参数各父级选项值组成的数组
 propsadd() {
    return { value: 'id', label: 'label', checkStrictly: true, children: 'children' };
  }
regionOptionsArea: []; 省市区三级
List:[{
proLocationArr: [] , // 编辑时回显之前选中数据
}]

  changeProLoacation(e, k) {
    console.log(e, k);
    this.$forceUpdate(); 坑1,2解决办法-强制刷新
  }

// 编辑回显
 getDeatil(){
 for (let i = 0; i < this.list.length; i++) {
            this.bindEvent(`proLocationRef${i}`); 坑1,2解决办法-回显数据          }
}

// bindEvent方法
 bindEvent(ref: string) {
    const that = this as any;
    this.$nextTick(() => {
      const popper = document.querySelector(`.${ref}`) as any;
      if (popper) {
        setTimeout(() => {
          const labelDoms = popper.querySelectorAll('.el-cascader-node .el-cascader-node__label') as any;
          const radioDoms = popper.querySelectorAll('.el-cascader-node .el-radio__inner') as any;
          if (labelDoms && labelDoms.length) {
            labelDoms.forEach((item, index) => {
              item.addEventListener('click', () => {
                radioDoms[index].click();
              });
            });
            labelDoms.forEach((item, index) => {
              item.addEventListener('dblclick', () => {
                radioDoms[index].click();
                that.$refs[ref].dropDownVisible = false;
              });
            });
          }
        }, 500);
      }
    });
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值