vue--el-tree懒加载数据并且实现树的过滤

树的样式:
在这里插入图片描述
过滤效果:
在这里插入图片描述
过滤代码实现:
1,如果这里的树数据是全加载,即可使用element-ui中的设置,进行前端过滤。
element-ui对应的组件位置

<el-input
  placeholder="输入关键字进行过滤"
  v-model="filterText">
</el-input>
<el-tree
  class="filter-tree"
  :data="data"
  :props="defaultProps"
  default-expand-all
  :filter-node-method="filterNode"
  ref="tree">
</el-tree>
// 监听输入框中的数据
 watch: {
      filterText(val) {
        this.$refs.tree.filter(val);
      }
    },

    methods: {
      filterNode(value, data) {
        if (!value) return true;
        return data.label.indexOf(value) !== -1;
      }
    },

2,如果这里的树数据是懒加载,,需要使用后端的模糊加载,返回搜索到的树的节点。
树的懒加载实现
重要的是:filter-node-method=“filterNode”,这个属性

<el-input placeholder="请输入搜索内容" v-model="filterText" class="inputStyle" clearable> </el-input>
             <el-tree
              :data="treeData"
              node-key="id"
              :filter-node-method="filterNode"
              ref="dimTree"
              :props="treeDataDefaultProp"
              class="tree_Style"
              :expand-on-click-node="false"
              :load="loadNode"
              lazy
            ></el-tree>
	  data(){
			return {
				filterText: '',
				keyword:'',
				}
			}
 watch: {
    // 树节点的过滤
    filterText(val) {   
      this.keyword = val
      this.getTreeData()
    }
methods:{
// 将keyword传入到接口中,从后端返回模糊匹配后的节点,然后赋值给树绑定的数据变量,即可完成。
 // 得到树的列表
    async getTreeData() {
      const param = {
        type: Number(this.cateTabActive),
        keyword: this.keyword
        };
      const res = await this.$api.get('/api/category', param);
      if (res.code == 200) {
        this.treeData = res.info;
      } else {
        return false;
      }
    },
}
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,下面是实现三级懒加载的基本思路: 1. 定义形结构的数据,包括每个节点的id、label、是否有子节点、子节点id等信息。 2. 使用el-tree组件进行形结构的展示,其中第一级节点可以通过props的data属性传入,第二级和第三级节点需要通过load方法进行懒加载。 3. 在load方法中,获取当前节点的子节点信息,可以通过ajax请求后端接口获取数据。在获取的数据中,需要将每个节点的hasChildren属性设置为true或false,表明该节点是否还有子节点,同需要将子节点的id信息存储在该节点的children属性中。 4. 当用户点击某个节点,会触发el-tree组件的node-click事件,此可以通过该事件的参数node获取当前节点的信息,从而获取该节点的子节点信息。 5. 在load方法中,可以根据当前节点的信息判断是第二级节点还是第三级节点,然后再根据节点的id信息去获取对应的子节点信息。 6. 最后将获取到的子节点信息通过callback函数返回给el-tree组件,从而完成懒加载操作。 下面是一个简单的示例代码: ``` <template> <el-tree :data="data" :load="loadNode"></el-tree> </template> <script> export default { data() { return { data: [ { id: 1, label: '一级节点1', hasChildren: true, children: [] }, { id: 2, label: '一级节点2', hasChildren: true, children: [] } ] } }, methods: { loadNode(node, resolve) { if (node.level === 0) { // 加载第二级节点 this.loadSecondLevelNode(node, resolve); } else if (node.level === 1) { // 加载第三级节点 this.loadThirdLevelNode(node, resolve); } }, loadSecondLevelNode(node, resolve) { // 发送ajax请求获取该节点的子节点信息 const params = { parentId: node.data.id, level: 2 }; axios.get('/api/getChildren', { params }) .then(res => { const data = res.data; data.forEach(item => { item.hasChildren = true; item.children = []; }); resolve(data); }) .catch(error => { console.log(error); resolve([]); }); }, loadThirdLevelNode(node, resolve) { // 发送ajax请求获取该节点的子节点信息 const params = { parentId: node.data.id, level: 3 }; axios.get('/api/getChildren', { params }) .then(res => { const data = res.data; data.forEach(item => { item.hasChildren = false; item.children = []; }); resolve(data); }) .catch(error => { console.log(error); resolve([]); }); } } } </script> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值