欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Angular利用trackBy提升性能的方法

程序员文章站 2022-04-11 08:41:21
在angular的模板中遍历一个集合(collection)的时候你会这样写:
  • 在angular的模板中遍历一个集合(collection)的时候你会这样写:

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

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

    Angular利用trackBy提升性能的方法

    这样做的弊端是会进行大量的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就知道哪些项变动了:

    Angular利用trackBy提升性能的方法

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

    以上所述是小编给大家介绍的angular利用trackby提升性能的方法,希望对大家有所帮助