В Angular 7, когда свойство значения, испускаемого Observable
, связано со входом дочернего компонента, ожидается, что входное значение обновляется (и вызывается ngOnChanges
), даже когда связанное свойство не изменился?
Учитывая следующее наблюдаемое, которое просто испускает новый объект с идентичными свойствами каждую секунду:
const source$ = interval(1000).pipe(map(() => ({
prop: 'something'
})));
this.obs$ = source$;
Затем привяжите свойство переданного значения к дочернему компоненту:
<test-comp [something]="(obs$ | async)?.prop"></test-comp>
Что я наблюдаю, так это то, что вызывается «что-то» и ngOnChanges
из test-comp
.
Кроме того, сравнение текущих и предыдущих значений проверено в ngOnChanges
показывает, что они идентифицируются как:
if(changes['something'].currentValue === changes['something'].previousValue) {
console.log('They are equal');
}
Использование отдельной наблюдаемой, которая просто отображает свойство из наблюдаемой источника следующим образом:
this.obs2$ = source$.pipe(map(v => v.prop));
<test-comp [something]="(obs$ | async)"></test-comp>
Работает, как я и ожидал, не задано значение «что-то» и не вызывается ngOnChanges
.
Вот пример Stackblitz, который показывает рассматриваемое поведение:
Использование угловых 7.2.1
Возможно, я просто неправильно понял, но поведение кажется непоследовательным