【发布时间】:2019-05-22 00:52:54
【问题描述】:
我试图了解 Angular 的 *ngFor 指令是如何在幕后工作的。
我想知道的是,传递给指令的可迭代对象是否在每次循环迭代时被解释(如 JS for 循环的条件),或者 Angular 是否创建了一个具有该值的“缓存”类变量。为了回答这个问题,我做了一个ngFor,它有一个方法返回一个数组作为可迭代对象。
<li *ngFor="let data of test(dataArr)">{{data}}</li>
相关的 TS:
dataArr = [1,2,3,4];
iterationNb = 1;
test(arr) {
console.log('has iterated', this.iterationNb++);
return arr.filter(i => true);
}
这是我在控制台中得到的:
has iterated 1
has iterated 2
has iterated 3
has iterated 4
如果您需要 Angular 项目,这里是我用于试用的示例应用程序:https://stackblitz.com/edit/angular-3kmyyw
太好了,我看到 angular 只是在每次迭代时调用该方法。但这对我来说开始变得复杂......
然后我尝试通过在其中添加一些其他值来更改该方法使用的引用数组dataArr:
dataArr = [1,2,3,4,5,6,7];
但现在我的控制台中仍然有 4 次迭代... 然后我尝试了
dataArr = [1,2];
还有 4 次迭代……
所以现在我对此感到非常困惑...... 为什么我总是有 4 次迭代?第一次尝试只是幸运地在我的数组中选择了 4 个项目,实际上与此无关? 我试图查看 angular ngfor 源代码,但我仍然不是那种无需解释就能理解它的忍者……
谢谢
【问题讨论】:
-
我试过你的 stackblitz,它显示了超过 4 次迭代
标签: angular loops ngfor angular2-changedetection