背景:
vue下使用elementUI

文档:
http://element-cn.eleme.io/#/zh-CN/component/tree#tree-shu-xing-kong-jian

需求:
只保存二级节点中选中的数据;不保存一级节点选中的数据。

效果:

数据来源:
后台提供两个接口分别用于取第一级节点和第二级节点的数据;

思路:
点击标签列表时,触发selectLabelList获取第一级节点的数据触发lodeNode进行填充,展开一级节点;点击任一一级节点的下拉箭头通过loadNode的node.level==1获取二级节点进行填充。每次选择都会触发handleCheckChange获取选中或删除弃选的内容;最终将用户选中的所有二级数据保存到labelCheckedList这个数组中。

注意点:
node-key、ref、lazy这3个属性一定要有
一级节点传递给二级节点的值是用node.data里面的id即node.data.id而不是用官网案例上的node.id(被坑过)
1
2
实战:
html:

<el-button @click="selectLabelList">标签列表</el-button>
<el-tree
node-key="id"
ref="tree"
highlight-current
:props="props"
:load="loadNode"
lazy=""
show-checkbox
@check-change="handleCheckChange">
</el-tree>
1
2
3
4
5
6
7
8
9
10
11
js:这是核心的部分代码,并不是所有,有的字段还没有定义。

data() {
return {
labelCheckedList:[],
props: {
label: 'name',
children: 'zones',
}}
// labelCheckedList接收被勾选的数据
handleCheckChange(data){
this.currTreeId=data.id
setTimeout(() => {
let currtData = this.$refs.tree.getCheckedNodes(true)
this.labelCheckedList = currtData;
}, 100);
},
//懒加载时触发
loadNode(node, resolve) {
if (node.level === 0) {
return resolve(this.categorylist);
}
if (node.level > 1) return resolve([]);
if(node.level === 1) { // 二级节点
this.getChildrenNode(node,resolve)
}
},
// 二级节点
getChildrenNode(node,resolve) {
let categoryId = node.data.id;
this.$http.post('/api/getLabelListByCategoryId', {
categoryId:categoryId
},
{
emulateJSON: true,
emulateHTTP: true
}).then(res => {
this.childrenList = res.body;
if(this.childrenList.length==0){
this.$message.error('数据拉取失败,请刷新再试!');
return;
}
resolve(this.childrenList);
});
},
// 收起、展示tree
selectLabelList() {
if(!this.isShowTree){
this.getCategorylist();
}else{
this.$refs.tree.$data.store.lazy = false
this.isShowTree=false;
}

},
//获取一级节点
getCategorylist(){
this.$http.post('/api/categorylist', {
searchInfo: this.searchLabelInfo,
}).then(res => {
let data = res.body.data.list;
if(data.length > 0){
data.forEach(item => {
item.disabled= true;
})
}
this.categorylist = data;
this.isShowTree=true;
})
},

vue elementUi tree 懒加载使用详情的更多相关文章

  1. Vue代码分割懒加载的实现方法

    什么是懒加载 懒加载也叫延迟加载,即在需要的时候进行加载,随用随载. 为什么需要懒加载 在单页应用中,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多 ...

  2. vue中的懒加载和按需加载

    懒加载 (1)定义:懒加载也叫延迟加载,即在需要的时候进行加载,随用随载. (2)异步加载的三种表示方法: 1. resolve => require([URL], resolve),支持性好 ...

  3. Vue 自定义图片懒加载指令v-lazyload

    Vue是可以自定义指令的,最近学习过程中遇见了一个需要图片懒加载的功能,最后参考了别人的代码和思路自己重新写了一遍.以下将详细介绍如何实现自定义指令v-lazyload. 先看如何使用这个指令: &l ...

  4. 在webpack中使用Code Splitting--代码分割来实现vue中的懒加载

    当Vue应用程序越来越大,使用Webpack的代码分割来懒加载组件,路由或者Vuex模块, 只有在需要时候才加载代码. 我们可以在Vue应用程序中在三个不同层级应用懒加载和代码分割: 组件,也称为异步 ...

  5. vue路由的懒加载

    一.懒加载 也叫延迟加载或者按需加载,即在需要的时候进行加载,   二.为什么要使用懒加载 像vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要 ...

  6. Vue小技巧-懒加载

    Vue懒加载包括图片懒加载与路由懒加载 1.图片懒加载: 首先安装 vue-lazyload包 然后导入并加载事先下载好的加载图片 import VueLazyLoad from 'vue-lazyl ...

  7. Vue Router的懒加载路径

    单页应用产出的入口chunk大小随着业务的复杂度线性增加,导致后期加载速度越来越慢.后面就需要对不同路径下的模块进行拆分,打包到相应的chunk下,按需加载,找到chunk的大小.个数和页面加载速度的 ...

  8. element-ui树结构懒加载

    在实际项目中,往往树结构数据量较大,这时树节点必须懒加载 element-ui树的懒加载: <div style="width:100%;height:420px;overflow: ...

  9. vue+webpack 实现懒加载的三种方式

    第一种: 引入方式 就是正常的路由引入方式 const router = new Router({ routes: [ { path: '/hyh', component: hyh, name: 'h ...

随机推荐

  1. Jmeter计数器的使用-转载

    说一下jmeter中,配置元件-计数器的使用. 如果需要引用的数据量较大,且要求不能重复或者需要自增,那么可以使用计数器来实现. 1.启动jmeter,添加线程组,右键添加配置元件——计数器,如下图: ...

  2. 腾讯微服务框架Tars的初体验

    最近研究了一下腾讯的微服务体系开发框架. 官方的搭建过程:https://github.com/TarsCloud/Tars/blob/master/Install.zh.md 自己填的坑: 不得不说 ...

  3. Zabbix Documentation 4.0

    Zabbix Documentation 4.0 1 Create user account For all of the Zabbix daemon processes, an unprivileg ...

  4. 使用 ESlint、lint-staged 半自动提升项目代码质量

    最近在项目部署了ESlint还有一些配套的工具,比如 prettier husky lint-staged,有些心得写出来分享下. 依据本篇可以实现在git commit之时,重新格式化代码,同时进行 ...

  5. 安装JDK(Windows)

    安装JDK java 安装JDK 下载JDK并安装 配置环境变量 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.8.0_144 (jdk安装路径) 变量名: ...

  6. springcloud中微服务的优雅停机(已验证)

    大部分项目部署中,为了方便,可能都直接使用kill -9 服务的pid来停掉服务. 但是由于Eureka采用心跳的机制来上下线服务,会导致服务消费者调用此已经kill的服务提供者然后出错. 可以采用以 ...

  7. 如何更改Scratch3.0的LOGO

    1.用visual studio code打开文件夹scratch-gui-develop 找到SRC\components\menu-bar 方法1:制作图片更换掉图片scratch-logo.sv ...

  8. js 预解析以及变量的提升

    js在执行之前会进行预解析. 什么叫预解析? 预:提前 解析:编译 预解析通俗的说:js在执行代码之前会读取js代码,会将变量声明提前. 变量声明包含什么?1.var 声明 2.函数的显示声明. 提前 ...

  9. java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver

    java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver at java.net.URLClassLoader.findClass(URLC ...

  10. 《逆袭团队》第八次团队作业:Alpha冲刺

    项目 内容 软件工程 任课教师博客主页链接 作业链接地址 团队作业8:Alpha冲刺 团队名称 逆袭团队 具体目标 完成最后冲刺阶段的5次博客 一.团队项目github仓库地址:Github 二.Sc ...