vue3+quasar tree树结构的展开以及自定义过滤

实现功能:

  1. 点击树节点可以获取节点的信息,并在左侧表单进行编辑;同时点击时进行节点的展示与折叠。
  2. 过滤父节点时同时展示子节点内容

在这里插入图片描述

    <q-input
        ref="filterRef"
        filled
        v-model="filter"
        label="过滤节点"
        class="filterInput"
      >
        <template v-slot:append>
          <q-icon
            v-if="filter !== ''"
            name="clear"
            class="cursor-pointer"
            @click="resetFilter"
          />
        </template>
      </q-input>
    <q-tree
        :nodes="nodesTree"
        node-key="id"//包含唯一节点id的每个节点对象的属性名
        :filter="filter"
        :filter-method="myFilterMethod"
        selected-color="primary"
        v-model:selected="selected"//当前所选节点的键
        @update:selected="treeSelect"//当所选节点更改时发出
        accordion//允许将树设置为手风琴模式
        ref="treeRef"
        label-key="label"//包含节点标签的每个节点对象的属性名
        class="treelist"
      >
    </q-tree>
	setup() {
		const filter = ref('');
		const selected = ref('');
		//获取tree的ref
        const treeRef = ref();
        const filterIds = ref(null);
      
     return xxxx
	}

setExpanded 可以设置节点是否展开
在这里插入图片描述
getNodeByKey获取了节点的具体内容
在这里插入图片描述
保存上次点击key是因为加了selected有了选中和被选中的状态,不会点击展开再点击折叠了,就加了判断,当取消选择节点时折叠上次选中的节点。

 const treeSelect = () => {
      isEdit.value = true;
      const tree = treeRef.value;
      list = tree.getNodeByKey(selected.value);
      // 保存上次点击的节点key
      if (selected.value != null) {
        oldSelectKey.value = selected.value;
      }
      if (JSON.stringify(list) != "{}" && list != undefined) {
        tree.setExpanded(selected.value,true,);
      }else{
        tree.setExpanded(oldSelectKey.value,false,);
      }
      addDis.value = true;
      setForm(list);
    };

过滤时默认筛选父节点是不展示子节点的信息的。通过子节点的父id和父节点的id进行判断。

 //过滤的自定义方法        
        const myFilterMethod = (node, filter) => {
            会对当前的每条Node进行一次过滤
      		const filt = filter;
      		if (!filt) return true
      		if (node.label && node.label.indexOf(filt) > -1 ) {
        		filterIds.value = node.id
      		}
     		 return node.label && node.label.indexOf(filt) > -1 ||node.parent == filterIds.value
    		};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值