Я пытаюсь понять, как директива 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
Если вам нужен угловой проект, вот мой пример приложения, используемого для моих испытаний: https://stackblitz.com/edit/angular-3kmyyw
Отлично, я вижу, что angular просто вызывает методна каждой итерации.Но это то, где это начинает быть сложным для меня ...
Затем я попытался изменить массив ссылок dataArr
, используемый методом, добавив в него некоторые другие значения, например:
dataArr = [1,2,3,4,5,6,7];
Но теперь у меня все еще есть 4 итерации в консоли ... Затем я попытался с
dataArr = [1,2];
и еще 4 итерациями booom ...
Так что теперь я очень озадаченэто ... Почему у меня всегда 4 итерации?Первой попыткой была просто удача выбрать 4 элемента в моем массиве, и на самом деле это не имеет к этому никакого отношения?Я попытался взглянуть на угловой исходный код ngfor, но я все еще не тот ниндзя, который понимает это без объяснений ...
Спасибо