Angular2没有检测到Array中的变化

时间:2016-12-16 13:01:27

标签: angular ionic2 ngfor

我正在进行Ionic2 / Angular2项目。我有一个

*ngFor="let item of items | async | customPipe"

在我的代码中。 异步是因为items Observable<Item[]> 。我的customPipe在第一次运行时工作正常。但是当我通过我的customPipe过滤掉它的项目时,我对其进行了任何更改。

问题是什么? *ngFor只运行一次吗?或者我是否必须强制进行DOM更新?谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

根据Angular2管道文档:

  

只有在检测到输入值的纯变化时,Angular才会执行纯管道。纯变化是对原始输入值(String,Number,Boolean,Symbol)的更改或更改的对象引用(Date,Array,Function,Object)。

     

Angular忽略(复合)对象内的更改。如果我们更改输入月份,添加到输入数组或更新输入对象属性,它将不会调用纯管道。

<强>原因

  

这似乎有限制,但也很快。对象引用检查很快 - 比深度检查差异要快得多 - 因此Angular可以快速确定它是否可以跳过管道执行和视图更新。

因此,当您更改数组或数组中的元素时,数组引用不会更改。

因此,切换到.onPush或手动触发更改检测可能会解决您的问题。

来源:https://angular.io/docs/ts/latest/guide/pipes.html#!#pure-and-impure-pipes