При добавлении канала среза в объект данных ниже и при отправке этих данных методу set @Input
дочернего компонента этот метод вызывает бесконечные вызовы. При удалении только канала среза из объекта данных он работает как обычно, метод @Input
вызывается только один раз.
Шаблон родительского компонента:
<ng-container
*ngIf="[
{ name: 'a', order: 1 },
{ name: 'b', order: 2 },
{ name: 'c', order: 3 },
{ name: 'd', order: 4 },
{ name: 'e', order: 5 }] | slice:0:3 as data"
>
<slice-pipe-test [testData]="data"></slice-pipe-test>
</ng-container>
Машинописание дочернего компонента:
@Input()
set testData(testData) {
console.log(testData);
}
Журнал консоли, показывающий бесконечные вызовы:
Вывод
Полный пример кода (необходимо добавить «| slice: 0: 3» кобъект данных в app.component.html, как показано выше, который вызывает бесконечные вызовы, и браузер зависает):
https://codesandbox.io/s/3dg47
Это как-то связано с обнаружением изменений /SlicePipe не является чистым и работает, как ожидалось? Если переместить объект данных со срезом в код машинописного текста, а затем сослаться на него в HTML-шаблоне, эта проблема больше не возникает. Как сохранить фрагмент в шаблоне html без бесконечных вызовов метода дочернего компонента @Input
?