当前位置: 代码网 > it编程>编程语言>Javascript > 如何使用el-cascader组件写下拉级联多选及全选功能

如何使用el-cascader组件写下拉级联多选及全选功能

2024年05月18日 Javascript 我要评论
样式说明: 级联选择器中加上全选的按钮, 并且保证数据响应式。思路因为是有全选的功能,所以不能直接使用el-cascader组件, 而是选择使用el-select组件, 在此组件内部使用el-casc

样式

说明: 级联选择器中加上全选的按钮, 并且保证数据响应式。

思路

  • 因为是有全选的功能,所以不能直接使用el-cascader组件, 而是选择使用el-select组件, 在此组件内部使用el-cascader-panel级联面板
  • 全选按钮也是写在el-select组件中, 并且去监听全选按钮的状态, 根据全选的状态, 决定级联面板的数据与样式
  • 如果想要获取到最终选择的数据, 还是取级联面板绑定的值,而不是select的值。

代码实现

template:

注意:
1,el-select组件中,必须要写入一个el-option组件, 可以隐藏, 但必须存在

2,选中的数据响应式绑定的其实是级联面板的数据,同步到了select中,并且满足其展示的内容,比如“已选中2项”

 <el-form-item>
        <div class="theme-date theme">
          <div class="theme-date-prepend">功能模块</div>
          <el-select v-model="selectmoduledata">
            <el-option style="display: none" value=""></el-option>
            <el-checkbox class="allselect" v-model="allselectmodule"
              >全选</el-checkbox
            >
            <el-cascader-panel
              ref="cascadermodule"
              :options="treelist"
              v-model="cascadermoduledata"
              popper-class="popper-select"
              :show-all-levels="false"
              :props="cascaderprop"
              clearable
            >
            </el-cascader-panel>
          </el-select>
        </div>
      </el-form-item>

script:

// data数据:
cascaderprop: {
        multiple: true,
        value: "name",
        label: "name",
        children: "children",
      },
allselectmodule: false,
cascadermoduledata: [],
selectmoduledata: null,
// watch
watch: {
// 监听多选按钮是否被勾选
    allselectmodule: {
      immediate: true,
      handler(newval) {
        if (newval) {
        /// 执行的方法,可以在下面的methods中寻找
          this.cascaderallselect();
        } else {
          if(!this.$refs.cascadermodule) return
          this.$refs.cascadermodule.clearcheckednodes();
          this.$refs.cascadermodule.checkedvalue = []; // 清空选中值
          this.cascadermoduledata = [];
          this.$refs.cascadermodule.activepath = []; // 清除高亮
          this.$refs.cascadermodule.syncactivepath(); // 初始化(只展示一级节点)
        }
      },
    },
    // 监听级联面板绑定的数据去同步select的数据, 让其显示在选择框中
    cascadermoduledata: {
      immediate: true,
      handler(newval) {
        if (newval.length === 0) {
          this.selectmoduledata = "";
          if(!this.$refs.cascadermodule) return
          this.$refs.cascadermodule.activepath = []; // 清除高亮
          this.$refs.cascadermodule.syncactivepath(); // 初始化(只展示一级节点)
        } else {
          this.selectmoduledata = `已选${newval.length}项`;
        }
      },
    },
  },
/// methods
// 级联选择器全选, 其中modulearray表示的是级联面板绑定的数据,表示如果此时没有全选的话那就将所有的数据,赋值到级联面板中,这样在显示中,就表示全选的状态。
    cascaderallselect() {
      if (this.cascadermoduledata.length !== this.modulearray.length) {
        this.cascadermoduledata = this.modulearray;
      }
    },
// 直接获取级联面板的数据cascadermoduledata, 作为参数提交即可

到此这篇关于如何使用el-cascader组件写下拉级联多选及全选功能的文章就介绍到这了,更多相关el-cascader下拉级联多选内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com