美文网首页
vue + elementUI cascader 级联 任意选

vue + elementUI cascader 级联 任意选

作者: 梁庄十年 | 来源:发表于2021-08-17 23:19 被阅读0次

    elementui 本身组件支持任意选中, 但需要选中radio 按钮才可以, 用户体验不好,所以做了优化
    主要是将 radio 样式修改,层级变高, 当用户点击 label 文本时,实际点击的是 radio 亲测有效

    <template>
        <div class="merchant-con">
          <el-cascader
            v-model="value"
            :options="options"
            :props="props"
            filterable
            ref="cascader"
            @change="handleChange">
          </el-cascader>
        </div>
    </template>
    <script>
    export default {
      name: 'test',
      data () {
        return {
          value: [],
          options: [],
          props: {  // 配置数据格式 
            checkStrictly: true, // 是否严格的遵守父子节点不互相关联(官网配置项)
            value: 'categoryId',
            label: 'dispalyName',
          }
        }
      },
      methods: {
        handleChange() {
          const el = this.$refs.cascader;
          // 官方文档中有提供获取子节点的方法 getCheckedNodes; 
          // 通过监听当前的点击事件,判断是否还有子节点,如果没有,则关闭选项卡;  
          const mark = el.getCheckedNodes()[0].children.length;
          if(!mark) {
            el.dropDownVisible = false;
          }
        },
      },
    
       created () {
        // 本地 mock 数据 可以不用关注
        const options = [{
          categoryId: 'shejiyuanze',
          dispalyName: '设计原则',
          children: [{
              categoryId: 'yizhi',
              dispalyName: '一致'
            },{
              categoryId: 'fankui',
              dispalyName: '反馈'
            }, {
              categoryId: 'xiaolv',
              dispalyName: '效率'
            }, {
              categoryId: 'kekong',
              dispalyName: '可控',
              children: [{
                categoryId: 'test',
                dispalyName: '测试'
              }]
            }
          ]},{
            categoryId: 'daohang',
            dispalyName: '导航',
            children: [{
              categoryId: 'cexiangdaohang',
              dispalyName: '侧向导航'
            }, {
              categoryId: 'dingbudaohang',
              dispalyName: '顶部导航'
            }]
          }
        ]
        this.options = options;
      }
    </script>
    //  css 样式需要放在全局 否则不生效
    <style >
      .el-cascader-panel .el-radio {
        width: 100%;
        height: 100%;
        z-index: 10;
        position: absolute;
        top: 10px;
        right: 10px;
      }
      .el-cascader-panel .el-radio__input {
        visibility: hidden;
      }
      .el-cascader-panel .el-cascader-node__postfix {
        top: 10px;
      }
    </style>
    

    如果存在节点内容超长问题, 可以参考另一篇 文章, 亲测有效哦

    参考文档1
    参考文档2

    相关文章

      网友评论

          本文标题:vue + elementUI cascader 级联 任意选

          本文链接:https://www.haomeiwen.com/subject/vwlwbltx.html