el-tree懒加载可搜索(调后端接口)

el-tree懒加载el-tree懒加载可搜索(调后端接口)

<div class="search">
  <el-input
    v-model="searchVal"
    @keyup.enter.native="hEnter"
    placeholder="请输入搜索内容"
    suffix-icon="el-icon-search"
  />
</div>
<template>
    <div>
        <el-tree
        ref="tree"
        :props="props"
        :load="loadnode"
        :data="treeData"
        show-checkbox
        :lazy="isLazy"
        ></el-tree>
    </div>
</template>
<script>
import { gettreeData } from ''
export default {
    data() {
        return {
            isLazy: true,  // 控制是否懒加载的标的
            treeData: [],
            props: {
                label: "name",
                isLeaf: (data, node) => {   // 判断复选框是否显示,逻辑看情况
		            if(data.isSelectable) {
		                return true
		            }
		        }, 
                children: 'list'
            }
        }      
    },
    methods: {
    hEnter() {
      // 查询
      let search = this.searchVal;
	      this.isLazy = false;
	      this.gettreeData(1, "", search).then((res) => {
	        this.treeData = res;
	        this.isLazy = true;
	      });
       },
        async gettreeData(i) {
            const res = await gettreeData({
                parentId: i
            });
            return res.data.data.list
        },
        async loadnode(node, resolve) {   // 不需要在created中调用,第一次默认加载tree根节点数据
            if(node.level == 0) {
                let list = await this.gettreeData(100001)  // 调用gettreeData方法,这个方法直接将新的数据return出去
                resolve(list)
            } else {
                this.gettreeData(node.data.id).then(res => {  // 请求当前节点下的子节点
                    if(res){
                        setTimeout(()=>{
                            resolve(res)
                        },200)
                    } else {
                        return resolve([])
                    }
                })
            }
        }

    }
}
</script>

隐藏复选框

/deep/.el-tree .el-tree-node .is-leaf + .el-checkbox .el-checkbox__inner {
      display: inline-block;
    }
    /deep/.el-tree .el-tree-node .el-checkbox .el-checkbox__inner {
      display: none;
    }
    /deep/.el-tree-node__content > .el-tree-node__expand-icon {
      padding-right: 0 !important;
    }
问题

el-tree调后端接口查询有一个注意的地方,使用懒加载,那绑定的:data="treeData"就不会起作用,那就没办法更新数据了。

解决

动态设置el-tree是不是懒加载
输入框输入内容,回车。这个搜索的渲染过程我们不要使用懒加载,渲染完成后我们再使用懒加载就可以了。而这个控制是否是懒加载的标的就是isLazy。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现 el-tree搜索,可以通过监听输入框的值来控制。具体实现步骤如下: 1. 首先,在 el-tree 标签上添一个 ref 属性,用于获取 el-tree 的实例,例如 ref="tree" 。 2. 在 data 中定义一个 filterText 变量,用于保存输入框的值。 3. 在 watch 中监听 filterText 变量的变化,当有值时,关闭后端搜索的方法;当没有值时,开启并重新数据 。 4. 在 el-tree 标签上添 lazy 属性并设置为 true,表示开启 。 5. 在 el-tree 标签上添 load 属性,并绑定一个 loadNode 方法,用于在树节点展开时数据 。 以下是代码示例: ``` <template> <div> <input type="text" v-model="filterText" placeholder="输入搜索关键字" /> <el-tree :data="orgList" ref="tree" show-checkbox :props="defaultProps" node-key="id" @node-click="handleNodeClick" @check-change="handleClick" :default-expanded-keys="expandArr" lazy :load="loadNode" > <span class="custom-tree-node" slot-scope="{ node, data }"> <span class="tree-icon"> <img v-if="data.isTop" style="width: 20px; height: 16px" src="@/assets/img/repositoryImg/tree.png" alt />  {{ node.label }} </span> </span> </el-tree> </div> </template> <script> export default { data() { return { filterText: '', // 保存输入框的值 orgList: [], // 树形数据 defaultProps: { children: 'children', label: 'label' } }; }, watch: { filterText(val) { if (val) { this.$refs.tree.$data.store.lazy = false; // 当输入框有值时关闭 this.getSeachList(); // 获取后端搜索的数据 } else { this.$refs.tree.$data.store.lazy = true; // 开启 this.getOrgList(); // 数据 } } }, methods: { // 树节点方法 loadNode(node, resolve) { // 根据业务需求实现树节点数据的方法 }, // 获取后端搜索的数据 getSeachList() { // 根据业务需求实现后端搜索的方法 }, // 获取树形数据 getOrgList() { // 根据业务需求实现获取树形数据的方法 }, // 节点点击事件 handleNodeClick(node) { // 根据业务需求实现节点点击事件的方法 }, // 复选框点击事件 handleClick() { // 根据业务需求实现复选框点击事件的方法 } } }; </script> ``` 以上就是实现 el-tree 搜索的方法。根据输入框的值来控制开关,并实现后端搜索的数据获取。同时使用 lazy 属性和 load 方法实现 el-tree功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值