关于Element UI tree组件 懒加载的更新操作

近期根据需求,要做一个懒加载的组织树,并且可以编辑组织树。但是编辑了之后无法进行实时更新。

一开始想到了很多解决方案,也在网上参考了很多方案,但是都又种种不足。

所以我去看了elementUI的tree组件的懒加载方法的源代码

Node.prototype.loadData = function loadData(callback) {
    var _this5 = this;

    var defaultProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};

    if (this.store.lazy === true && this.store.load && !this.loaded && (!this.loading || Object.keys(defaultProps).length)) {
      this.loading = true;

      var resolve = function resolve(children) {
        _this5.loaded = true;
        _this5.loading = false;
        _this5.childNodes = [];

        _this5.doCreateChildren(children, defaultProps);

        _this5.updateLeafState();
        if (callback) {
          callback.call(_this5, children);
        }
      };

      this.store.load(this, resolve);
    } else {
      if (callback) {
        callback.call(this);
      }
    }
  };

this明显是当前节点, 看if语句的条件中 this.loaded是当前节点是否已加载 。 resolve中把this.loaded置为了true;

所以只用将当前节点的父节点的loaded属性置为false就行了。 这样再次点击该节点时,会继续请求懒加载方法。

PS1 : 这里为了更人性化,我将isLeaf和expanded属性也置为了false。

PS2 : 光修改属性是无法触发视图更新的,这里我通过了vue.$set()方法来触发视图更新。  vue.$set的用法见官方文档:https://cn.vuejs.org/v2/api/#Vue-set

orgSuccess(){
      //如果是新增子节点,则刷新当前节点 ,如果是更新当前节点,刷新父节点
      let node = this.isNew?this.currentNode:this.currentNode.parent;
      node.loaded=false;
      node.isLeaf = false;
      this.$set(node,‘expanded‘,false);
    },

原文地址:https://www.cnblogs.com/fire-forget/p/12367636.html

时间: 2024-10-10 14:25:00

关于Element UI tree组件 懒加载的更新操作的相关文章

UI控件懒加载问题01

UI 控件懒加载问题: 1, 什么时候使用懒加载加载UI控件? 2, 加载控件的什么属性? 3, 用什么类型的指针修饰控件? code : (ARC) 定义属性, @property(nonatomic,weak) UIButton *customBtn1;   重写getter方法 -(UIButton *)customBtn1{ if (_customBtn1 == nil) { _customBtn1 = [UIButton buttonWithType:UIButtonTypeCusto

vue路由懒加载及组件懒加载

vue路由懒加载及组件懒加载: https://www.cnblogs.com/-roc/p/9983177.html 一.为什么要使用路由懒加载 为给客户更好的客户体验,首屏组件加载速度更快一些,解决白屏问题. 二.定义 懒加载简单来说就是延迟加载或按需加载,即在需要的时候的时候进行加载. 三.使用 常用的懒加载方式有两种:即使用vue异步组件 和 ES中的import 1.未用懒加载,vue中路由代码如下 import Vue from 'vue' import Router from 'v

组件懒加载

在单页应用的世界,随着项目的复杂化,webpack打包后的文件越来越大,进入页面时,加载内容过多导致加载时间变长,不利于用户体验. 那什么是懒加载? 懒加载也叫延迟加载,即需要的时候进行加载. 1) 先来看看平时路由是如何配置 import Vue from 'vue' import Router from 'vue-router' import Home from '@/pages/home/homePage' import Detail from '@/pages/detail/detail

Ionic3 组件懒加载

使用懒加载能够减少程序启动时间,减少打包后的体积,而且可以很方便的使用路由的功能. 使用懒加载: 右侧红色区域可以省略掉(引用.声明也删掉) 若使用ionic命令新建page,则无需进行下面的操作,否则进行下面的操作: 新建文件:home.module.ts import { NgModule } from '@angular/core';import { IonicPageModule } from 'ionic-angular';import { LoginPage } from './lo

vue组件懒加载(Load On Demand)

在Web应用程序中,系统的瓶颈常在于系统的响应速度.如果系统响应速度过慢,用户就会出现埋怨情绪,系统的价值也因此会大打折扣.因此,提高系统响应速度,是非常重要的. 懒加载(Load On Demand)是一种独特而又强大的数据获取方法,它能够在用户滚动页面的时候自动获取更多的数据,而新得到的数据不会影响原有数据的显示,同时最大程度上减少服务器端的资源耗用. 用vue.js写单页面应用时,会出现打包后的JavaScript包非常大,影响页面加载,我们可以利用路由的懒加载去优化这个问题,当我们用到某

vue组件懒加载与路由懒加载的实现

在项目很大的时候,首页会一次导入所有页面与组件,可以使用懒加载实现项目的优化,但项目很小,不推荐使用,项目小,分开后的懒加载会发多次请求,带来更多的性能缺陷 路由写法 //假设components下有一个home.vue,需要在路由页面引入 new Router({ routes:[{ path:'/', name:"home", components:()=>import("./components/home") //将路由顶部的引入,放在这里就实现路由的懒

懒加载(延迟加载)之后,在使用数据过程中容易出现的bug

在UI中,使用懒加载,也就是延迟加载来加载数据的时候,总是会面临几个问题? 如:1. >为什么先创建NSArray属性? 2. >为什么重写NSArray的get方法? 3.>为什么要判断是否为空? 4.>为什么下方代码"//1"这里不用NSString stringWithFormat: 而"//2"这里要使用? 5.>同时"//2"这里为什么使用的是%ld 来作为占位符? 这些问题不搞懂,懒加载就很难通透,  代

前端性能优化方案-路由懒加载实现

组件懒加载也叫按需加载: 当打包构建应用时,JavaScript 包会变得非常大,影响页面加载.如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了. 打包 build 后的 dist 中 js 包文件太大,影响页面加载速度,使用 vue 的异步组件和 webpack 的代码分割功能,实现路由组件的懒加载: 下面通过 vue 的异步加载和 webpack 来实现组件懒加载: 先看例子不使用路由懒加载的情况: import Vue from 'v

使用 vant 的 v-lazy 实现图片 vue 在移动端的懒加载

官方文档:https://youzan.github.io/vant/#/zh-CN/lazyload 引入 Lazyload 是 Vue 指令,使用前需要对指令进行注册 import Vue from 'vue'; import { Lazyload } from 'vant'; // options 为可选参数,无则不传 Vue.use(Lazyload, options); 基本用法 将v-lazy指令的值设置为你需要懒加载的图片 <img v-for="img in imageLi