我正在进行Ionic2 / Angular2项目。我有一个
*ngFor="let item of items | async | customPipe"
在我的代码中。 异步是因为items
是 Observable<Item[]>
。我的customPipe
在第一次运行时工作正常。但是当我通过我的customPipe
过滤掉它的项目时,我对其进行了任何更改。
问题是什么? *ngFor
只运行一次吗?或者我是否必须强制进行DOM更新?谢谢你的帮助。
答案 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