Angular利用trackBy提升性能的方法

 更新时间:2018年01月26日 15:16:22   作者:无er不乐  
这篇文章主要介绍了在Angular中利用trackBy来提升性能的实现方法,需要的朋友可以参考下

在Angular的模板中遍历一个集合(collection)的时候你会这样写:

<ul>
 <li *ngFor="let item of collection">{{item.id}}</li>
</ul>

有时你会需要改变这个集合,比如从后端接口返回了新的数据。那么问题来了,Angular不知道怎么跟踪这个集合里面的项,不知道哪些该添加哪些该修改哪些该删除。结果就是,Angular会把该集合里的项全部移除然后重新添加。就像这样:


这样做的弊端是会进行大量的DOM操作,而DOM操作是非常消耗性能的。

那么解决方案是,为*ngFor添加一个trackBy函数,告诉Angular该怎么跟踪集合的各项。trackBy函数需要两个参数,第一个是当前项的index,第二个是当前项,并返回一个唯一的标识,就像这样:

import{ Component } from '@angular/core';

@Component({
 selector: 'trackBy-test',
 template: `
 <ul><li *ngFor="let item of items; trackBy: trackByIndex">{{item.name}}</li></ul>
 <button (click)="getItems()">Get Items</button>
 `
})
export class TrackByCmp{
 items: any[]=[];
 constructor(){
  this.items = [{name:'Tom'},{name:'Jerry'},{name:'Kitty'}];
 }
 getItems(){
  this.items = [{name:'Tom'},{name:'Jerry'},{name:'Mac'},{name:'John'}];
 }
 trackByIndex(index, item){
  return index;
 }
}

这样做之后,Angular就知道哪些项变动了:


我们可以看到,DOM只重绘了修改和增加的项。而且,再次点击按钮是不会重绘的。但是在没有添加trackBy函数的时候,重复点击按钮还是会触发重绘的(可以回头看第一个GIF)。

以上所述是小编给大家介绍的Angular利用trackBy提升性能的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Angular CLI 安装和使用教程

    Angular CLI 安装和使用教程

    本篇文章主要介绍了Angular CLI 安装和使用教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • AngularJS中的$parse服务与$eval服务用法实例

    AngularJS中的$parse服务与$eval服务用法实例

    这篇文章主要介绍了AngularJS中的$parse服务与$eval服务用法,结合实例形式分析了AngularJS中$parse服务与$eval服务的功能、使用方法与相关注意事项,需要的朋友可以参考下
    2023-05-05
  • Angular设置title信息解决SEO方面存在问题

    Angular设置title信息解决SEO方面存在问题

    爬虫在检索seo信息的时候会读不了js给其赋的值,导致搜索引擎收录不了或者收录了无效的信息,下面本文给大家介绍Angular设置title信息解决SEO方面存在问题,需要的朋友可以参考下
    2016-08-08
  • Angular 4依赖注入学习教程之简介(一)

    Angular 4依赖注入学习教程之简介(一)

    依赖注入式AngularJS的重要特性之一,依赖注入简化了Angular解析模块/组件之间依赖的过程。下面这篇文章主要给大家介绍了关于Angular 4依赖注入基础的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-06-06
  • AngularJS 仿微信图片手势缩放的实例

    AngularJS 仿微信图片手势缩放的实例

    这篇文章主要介绍了AngularJS 仿微信图片手势缩放的实例的相关资料,希望大家通过本文实现这样的功能,需要的朋友可以参考下
    2017-09-09
  • AngularJS2中一种button切换效果的实现方法(二)

    AngularJS2中一种button切换效果的实现方法(二)

    这篇文章主要介绍了AngularJS2中一种button切换效果的实现方法(二),非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • 浅谈Angular4实现热加载开发旅程

    浅谈Angular4实现热加载开发旅程

    本篇文章主要介绍了浅谈Angular4实现热加载开发旅程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 如何通过简单的代码描述Angular父组件、子组件传值

    如何通过简单的代码描述Angular父组件、子组件传值

    Vue组件是学习Vue框架最比较难的部分,下面这篇文章主要给大家介绍了关于如何通过简单的代码描述Angular父组件、子组件传值的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • 实例解析angularjs的filter过滤器

    实例解析angularjs的filter过滤器

    本文对angularjs的filter过滤器进行系统介绍,附上实例解析,便于理解。具有很好的参考价值,需要的朋友可以看下
    2016-12-12
  • AngularJs Modules详解及示例代码

    AngularJs Modules详解及示例代码

    本文主要介绍AngularJs Modules的相关知识,这里整理了详细的资料及简单示例代码,有兴趣的朋友可以参考下
    2016-09-09

最新评论