vue-treeselect 延迟加载(动态加载多层数据)

官方文档说明
===== go to ====> 官网 vue-treeselect 延迟加载

如果您有大量深度嵌套的选项,则可能只希望在初始加载时加载最顶层的选项,而仅在需要时加载其余选项。您可以通过执行以下步骤来实现:

  1. 通过设置声明一个卸载的分支节点children: null
  2. 添加 loadOptions 道具
  3. 每当卸载的分支节点被扩展时, loadOptions({ action, parentNode, callback, instanceId }) 都会被调用,然后您就可以执行从远程服务器请求数据的作业

1.html

            <treeselect
              v-model="value"
              :multiple="false" 
              :options="rootOptions"
              :load-options="loadOptions"
              placeholder="选择上级模型"
            />

multiple: 展示多选框
rootOptions : 初始化加载根节点数据
loadOptions:单击根节点后加载子节点数据

2.js

export default {
  data: () => ({
    value: null,
    rootOptions: [],
  }),
  methods: {
  	/** 初始化下拉框数据 **/
    getRootModels() {
       //初始化数据 只加载根节点
       locationTree('0').then(response => {
         for(let index of response.data){
           let modeInfo = {} ;
           modeInfo.id = index.id
           modeInfo.label = index.name;
           modeInfo.children = null;
           this.rootOptions.push(modeInfo);
         }
       });
     },
     /** 加载子节点数据 **/
     loadOptions({ action, parentNode, callback }){
       if (action === LOAD_CHILDREN_OPTIONS) {
       	  //加载点击节点的 子节点
          locationTree(parentNode.id).then(response => {
            let arr = [];
            for(let index of response.data){
              let chiledModeInfo = {} ;
              chiledModeInfo.id = index.id
              chiledModeInfo.label = index.name;
              chiledModeInfo.children = null;
              arr.push(chiledModeInfo);
            }
            parentNode.children = arr;
          });
          callback();
        }
     },
  }
}

3.效果

在这里插入图片描述

4.问题和修改思路

在这里插入图片描述
思(gu)路(ji):如上图,“ileave tude of…” 已经是最后一层的子节点了,但是还显示有箭头。这里应该没有箭头的,可以再加载子节点的时候进行判断,如果本层没有子节点不设置"children"即可。

       loadOptions({ action, parentNode, callback }){
          if (action === LOAD_CHILDREN_OPTIONS) {
            locationTree(parentNode.id).then(response => {
              let arr = [];
              for(let index of response.data){
                let chiledModeInfo = {} ;
                chiledModeInfo.id = index.id
                chiledModeInfo.label = index.name;
                /** 伪代码 start **/
                //在这里判断下是不是叶子节点 如果是 就给个数组 不是就不给了
                if(index.isLeaf){
                 chiledModeInfo.children = null;
                }
                /** 伪代码 end**/
                arr.push(chiledModeInfo);
              }
              parentNode.children = arr;
            });
            callback();
          }
        }
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
el-select 组件在 Vue.js 中是一个下拉选择器组件,而 "懒加载" 是一种优化技术,用于在需要时再加载数据,以减少初始加载时间和资源消耗。 如果你想要实现 el-select 组件的懒加载,你可以使用其提供的远程搜索功能。该功能允许你在用户输入时动态加载选项。 以下是一个简单的示例代码,演示了如何使用 el-select 的懒加载功能: ```vue <template> <el-select v-model="selectedOption" filterable remote :remote-method="loadOptions" > <el-option v-for="option in options" :key="option.value" :label="option.label" :value="option.value" ></el-option> </el-select> </template> <script> export default { data() { return { selectedOption: '', options: [] }; }, methods: { loadOptions(query) { // 在这里根据输入的 query 加载远程数据 // 例如使用 axios 发起异步请求获取数据 axios.get('/api/options', { params: { query } }) .then(response => { this.options = response.data; }) .catch(error => { console.error(error); }); } } }; </script> ``` 在上面的代码中: - `v-model` 绑定了选中的选项的值; - `filterable` 启用了可搜索功能,允许用户输入查询条件; - `remote` 启用了远程搜索功能; - `remote-method` 指定了一个方法名,用于在用户输入时触发加载选项的远程数据。 你需要替换示例代码中的 `/api/options` 为实际的后端接口地址,以便获取远程数据。这个接口应该根据输入的查询条件返回相应的选项数据

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值