ngFor

ngForOf指令通常使用缩写形式*ngFor为集合中的每个项呈现模板的结构指令。该指令放置在元素上,该元素将成为克隆模板的父级。

<li *ngFor="let item of items; index as i; trackBy: trackByFn">...</li>

一般使用是:

const list = [{age: '16'}, {age: '18'}, {age: '15'}]

<li *ngFor="let item of list; index as i>{{item.age}}</li>
// 或者
<li *ngFor="let item of list; let i = index">{{item.age}}</li>

使用trackBy提高性能

trackBy: trackByFn 定义如何跟踪iterable中项的更改的函数。

在iterable中添加、移动或移除项时,指令必须重新呈现适当的DOM节点。为了最小化DOM中的搅动,只重新呈现已更改的节点。

默认情况下,更改检测器假定对象实例标识iterable中的节点。提供此函数时,指令使用调用此函数的结果来标识项节点,而不是对象本身的标识。

函数接收两个输入,迭代索引和节点对象ID。

要想自定义默认的跟踪算法,NgForOf 支持 trackBy 选项。 trackBy 接受一个带两个参数(index 和 item)的函数。

如果给出了 trackBy,Angular 就会使用该函数的返回值来跟踪变化。

@Component({
selector: 'my-app',
template: `
<ul>
<li *ngFor="let item of list;">{{item.age}}</li>
<li *ngFor="let item of list;trackBy: trackByFn">{{item.age}}</li>
</ul>
<button (click)="getItems()">Refresh items</button>
`,
})
export class App {
  list = [{age: '16'}, {age: '18'}, {age: '15'}];   constructor() {
    this.list= [{age: '16'}, {age: '18'}, {age: '15'}]
  }   getItems() {
    this.list= [{age: '16'}, {age: '18'}, {age: '15'}, {age: '80'}]
  }   trackByFn(index, item) {
    return item.age; // or index
  }
}

列表发生变化是,如果没有添加 trackBy , 那么与数据关联度的所有DOM元素会重新渲染;

如果使用trackBy :更改列表时,Angular可以根据唯一标识符跟踪已添加或删除的项目,并仅创建或销毁已更改的项目。

局部变量

const list = [{age: '16'}, {age: '18'}, {age: '15'}];
<li *ngFor="let item of list; first as isFirst">{{item.age}} <span *ngIf="isFirst">岁</span> </li>
/*
  16岁
  18
  15
*/

NgForOf 导出了一系列值,可以指定别名后作为局部变量使用:

  • $implicit: T:迭代目标(绑定到ngForOf)中每个条目的值。

  • ngForOf: NgIterable<T>:迭代表达式的值。当表达式不局限于访问某个属性时,这会非常有用,比如在使用 async 管道时(userStreams | async)。

  • index: number:可迭代对象中当前条目的索引。

  • first: boolean:如果当前条目是可迭代对象中的第一个条目则为 true

  • last: boolean:如果当前条目是可迭代对象中的最后一个条目则为 true

  • even: boolean:如果当前条目在可迭代对象中的索引号为偶数则为 true

  • odd: boolean:如果当前条目在可迭代对象中的索引号为奇数则为 true

最新文章

  1. Scala学习笔记之伴生对象
  2. Android成长日记-Android监听事件的方法
  3. Map/Reduce的类体系架构
  4. HttpWebRequest和HttpWebResponse用法小结
  5. debian小巧好看的桌面
  6. POJ2002 二分查找&amp;哈希
  7. Atitit.软件guibuttonand面板---os区-----linux windows搜索文件 目录
  8. 8个超炫酷的jQuery相册插件欣赏
  9. Struts2基础学习(四)&mdash;类型转换器和数据校验
  10. SCP“免密” 远程COPY较多文件
  11. Request.QueryString(&quot;id&quot;)与Request(&quot;id&quot;)区别
  12. Pyhon学习_04_字典、集合
  13. 正则表达式中的 \b 什么意思?
  14. Azure AI 服务之文本翻译
  15. 发布自己的npm包、开源项目
  16. python使用requests发送multipart/form-data请求数据
  17. windows 找不到文件&#39;igfxHK.exe&#39;
  18. Pandas缺失数据处理
  19. Ajax 与 JSON
  20. NSKeyValueObserving.m

热门文章

  1. 【LuoguP5328】[ZJOI2019]浙江省选
  2. 绑定与非绑定以及property装饰器_day_21 作业题
  3. [洛谷P4072] SDOI2016 征途
  4. 模意义下的FFT算法
  5. mvc api 关于 post 跟get 请求的一些想法[FromUri] 跟[FromBody] 同一个控制器如何实现共存
  6. three months timestamp
  7. XML的树结构与语法规则
  8. CF873F Forbidden Indices 后缀自动机+水题
  9. volatile学习
  10. 应对高并发场景的redis加锁技巧