vue elementUi tree 懒加载使用详情

vue elementUi tree 懒加载使用详情

2018年11月21日 11:17:04 开心大表哥 阅读数:3513

https://blog.csdn.net/a419419/article/details/84315751

背景:

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;
          })
    },

原文地址:https://www.cnblogs.com/hfultrastrong/p/10935793.html

时间: 2024-10-10 01:45:01

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

elementui tree懒加载刷新问题

在用elementUi el-tree懒加载的时候,发现只加载一次,即使数据刷新了,但是tree就是不刷新. 解决思路 //首先是保持根节点 loadNode(node, resolve) { // if (node.level === 0) { this.node_had = node;//这里是关键!在data里面定义一个变量,将node.level == 0的node存起来 this.resolve_had = resolve;//同上,把node.level == 0的resolve也存

Vue 路由的懒加载和组件的按需加载方法

// aview: function(resolve) { // require(["./a.vue"], resolve); // }, // bview: function(resolve) { // require(["./b.vue"], resolve); // } aview:require("./a.vue"), bview:require("./b.vue"), "懒加载也叫延迟加载,即在需要的时候进

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

Vue是可以自定义指令的,最近学习过程中遇见了一个需要图片懒加载的功能,最后参考了别人的代码和思路自己重新写了一遍.以下将详细介绍如何实现自定义指令v-lazyload. 先看如何使用这个指令: <img v-lazyload="imageSrc" > imageSrc是要加载的图片的实际路径. 为了实现这个指令,我们首先单独建立一个文件,名字为lazyload.js.并填写基本的代码,如下: //Vue 图片懒加载,导出模块 export default (Vue , o

element-ui树结构懒加载

在实际项目中,往往树结构数据量较大,这时树节点必须懒加载 element-ui树的懒加载: <div style="width:100%;height:420px;overflow: auto;"> <el-tree lazy :load="getOrgList" :props="defaultProps" highlight-current @node-click="handleNodeClick">

Vue Router 路由懒加载

将异步组件定义为一个返回Promise 的工厂函数. 函数样式的import()语法,是JavaScript新增加的模块加载语法,提案正处于TC39委员会的第四阶段.它返回一个Promise. 一 路由配置 import Vue from "vue"; import Router from "vue-router"; const Home = () => import(/*webpackChunkName:"home"*/ "./

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

实现方式: 1.webpack method require.ensure([''], callback, chunkName) ; 2.es6 motehod import() import().then() import(/* webpackChunkName: async-chunk-name */ /* webpackMode: lazy */ modulename) 需要安装bable插件 syntax-dynamic-import,因为import只能出现在页面顶部 具体实现: 第一

使用Webpack的代码拆分在Vue中进行懒加载

参考学习:https://alexjover.com/blog/lazy-load-in-vue-using-webpack-s-code-splitting/ 学习文案:https://webpack.docschina.org/guides/lazy-loading/ 原文地址:https://www.cnblogs.com/nayek/p/12123639.html

Vue实现一个图片懒加载插件

前言 图片懒加载是一个很常用的功能,特别是一些电商平台,这对性能优化至关重要.今天就用vue来实现一个图片懒加载的插件. 这篇博客采用"三步走"战略--Vue.use().Vue.direction.Vue图片懒加载插件实现,逐步实现一个Vue的图片懒加载插件. Vue.use() 就像开发jQuery插件要用$.fn.extent()一样,开发Vue插件我们要用Vue.use().其实就是官方内部实现的一个方法,供广大开发者灵活开发属于自己的插件.只需要按照约定好的规则开发就行. 用

路由的懒加载

vue路由的懒加载: 1.什么是懒加载以及为什么要使用懒加载: 懒加载也就是延迟加载或者按需加载: 为什么要使用懒加载: 因为像vue这种单页面应用,如果不应用懒加载,运用webpack打包后的文件将会异常的大,当用户进入首页后,需要加载大量的组件,就会造成页面白屏的问题,不利于用户体验. 当运用懒加载,就可以将页面进行划分,,需要的时候加载页面,减少首页的加载压力:此时,进入首页就不用一次加载过多的资源造成用时过长,提高用户体验: 2.懒加载的两种方式: (1)vue异步组件实现路由懒加载: