我试图了解*ngForAngular 的指令在幕后是如何工作的。我想知道的是,传递给指令的可迭代对象是否在每次循环迭代时被解释(如 JSfor循环的条件),或者 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通过在其中添加一些其他值来更改该方法使用的 ref 数组,例如:
dataArr = [1,2,3,4,5,6,7];
但是现在我的控制台中仍然有 4 次迭代......然后我尝试了
dataArr = [1,2];
并且繁荣仍然是4次迭代......
所以现在我对此感到非常困惑......为什么我总是有 4 次迭代?第一次尝试只是幸运地在我的数组中选择了 4 个项目,实际上与此无关?我试图查看角度 ngfor 源代码,但我仍然不是那种无需解释就能理解它的忍者......
谢谢