实战:element-ui 树形控件之点击单选或多选

效果图:
在这里插入图片描述

重点:
如果需要对Tree节点进行过滤筛选,调用 Tree 实例的filter方法,参数为输入的关键词。需要注意的是,需要设置filter-node-method,值为过滤函数。具体如下:

HTML部分:

<el-tree
   ref="tree"
   :data="treeData"
   :expand-on-click-node="false"
   :props="defaultProps"
   :filter-node-method="filterNode"
   @node-click="handleClick"
 >
   <span slot-scope="{ node, data }">
     <template>
       <i
         :class="{
           'el-icon-folder': !node.expanded,
           'el-icon-folder-opened': node.expanded,
           'el-icon-user-solid': data.hasChildren === '2'
         }"
         style="color: #1890ff;"
       />
       <span>{{ node.label }}</span>
       <i
         v-if="selectedList.find(item => item.name === node.label)"
         class="el-icon-check"
       />
     </template>
   </span>
 </el-tree>

JS部分:

data() {
    return {
      defaultProps: {
        children: 'childrenList', // childrenList--映射tree数据源中的字段
        label: 'name' // name--映射tree数据源中的字段
      },
      treeData: [], // tree数据源
      searchVal: '', // 输入的关键词
      selectedList: []// 已选中的数据
      selectType:'single',
      setNode: new Set()
    }
  },
watch: {
	// 监听输入的关键词,调用 Tree 实例的filter方法
   searchVal(val) {
     this.$refs.tree.filter(val);
   }
 },
methods: {
	// 过滤节点
   filterNode(value, data) {
     if (!value) return true;
     return data.name.indexOf(value) !== -1;
   }// 实现点击多选或单选
  handleClick(nodeData) {
     if (this.selectType === 'single') {
       // 单选
       if (nodeData.hasChildren === 1) return // 表示有子节点
       if (this.setNode.has(nodeData)) {
         this.setNode.delete(nodeData)
       } else {
         this.setNode.clear()
         this.setNode.add(nodeData)
       }
     } else {
       // 多选
       this.setNode.has(nodeData)
         ? this.setNode.delete(nodeData)
         : this.setNode.add(nodeData)
     }
     this.selectedList = [...this.setNode]
   }
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值