el-cascader全选, vue+elementUI(el-cascader)实现全选功能

<template>
  <div class="block">
    <span class="demonstration">默认显示所有Tag</span>
    <el-cascader
    collapse-tags
    filterable
    v-model="values"
    @change="handleChange"
    :options="options"
    :props="props"
    clearable>
    </el-cascader>
    <el-checkbox v-model="checked" @change="changeFn()">全选</el-checkbox>
  </div>
  </template>
  
  <script>
    export default {
      data() {
        return {
          checked:true,
          selectAll:[],
          values:[],
          props: { multiple: true },
          options: [
		  { label: '层级1', value: '1', children: [
			{ label: '层级11', value: '11'},
			{ label: '层级12', value: '12'}
		  ]},
		  { label: '层级2', value: '2', children: [
			{ label: '层级21', value: '21' },
			{ label: '层级22', value: '22' },
		  ]},
		  { label: '层级3', value: '3', children: [
			{ label: '层级31', value: '31' }
		  ]}
		]
        };
      },
      mounted(){
         this.selectAll = this.makeData([],[],this.options)
         this.changeFn()
      },
      methods:{
          changeFn(val){
              !this.checked?this.values = []:this.values = JSON.parse(JSON.stringify(this.selectAll))
          },
          handleChange(value){
            this.checked = this.values.length == this.selectAll.length
          },
          makeData(list, upArray, dataSource) {
              dataSource.forEach((item) => {
                      const array = [...upArray, item.value]
                  if (item.children) {
                      this.makeData(list, array, item.children)
                  }else{
                      list.push(array)
                  }
              })
              return list;
          },
      }
    };
  </script>
  <style >
  .el-cascader .el-tag{
    max-width: 50% !important;
  }
  .el-cascader .el-tag:last-of-type{
    max-width: 20% !important;
  }
  .el-cascader__search-input{
    max-width: calc(30% - 20px);margin:0 0 0 5px !important;
    min-width:20px !important;
  }
  </style>

### 实现 Vue ElementUI `el-cascader` 组件多选全选后的编辑回显 为了实现在使用 VueElementUI 的 `el-cascader` 组件时,能够支持多选并实现全选以及编辑状态下的回显效果,可以按照如下方式构建逻辑。 #### 数据准备与组件配置 定义用于存储级联选择器的数据结构和属性设置: ```javascript data() { return { twoDatas: [ // 定义选项树形结构数据... ], twoProps: { multiple: true, checkStrictly: false, // 设置为false表示父子节点关联 emitPath: false // 只返回最后一层叶子节点的值 }, twoinput: [], // 存储已选中的项 }; } ``` #### 初始化默认选中项 当页面加载或进入编辑模式时,通过接口获取到之前保存的选择路径列表,并将其赋给 `v-model` 所绑定的变量 `twoinput` 来达到自动勾选的效果[^1]。 如果要模拟初始即存在部分预设好的选中情况,则可以在创建实例时直接指定这些值作为 `twoinput` 初始值的一部分。 #### 动态更新选中状态 对于新增加或者修改后的记录,在提交成功之后同样需要刷新当前显示的状态。可以通过重新请求最新的数据源来完成这一操作;也可以仅针对变化的部分做局部调整,比如利用事件监听机制捕获用户的交互行为(如点击确认按钮),进而同步至视图层面。 #### 关键代码示例 下面是一个简单的例子展示如何处理编辑状态下恢复之前的选中状态: ```html <template> <div class="cascader-container"> <!-- 级联选择框 --> <el-cascader style="width: 100%" :options="twoDatas" :props="twoProps" collapse-tags clearable filterable v-model="twoinput" @change="selectHandle" ></el-cascader> <!-- 模拟编辑按钮触发回显 --> <button @click="handleEdit">编辑</button> </div> </template> <script> export default { methods: { handleEdit() { const savedSelections = ['path/to/previously/selected/item']; // 假定这是从前端缓存或其他地方取得的历史选中路径数组 this.twoinput = savedSelections; } } }; </script> ``` 此段代码展示了如何在用户点击“编辑”按钮后,将历史上的选中路径填充回到 `el-cascader` 中去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值