在Angular 7中,当Observable
发出的值的属性绑定到子组件的输入时,期望输入值得到更新(并调用ngOnChanges
),甚至绑定属性没有更改时?
鉴于以下可观察到的情况,它们每秒仅发出一个具有相同属性的新对象:
const source$ = interval(1000).pipe(map(() => ({
prop: 'something'
})));
this.obs$ = source$;
然后将发出的值的属性绑定到子组件:
<test-comp [something]="(obs$ | async)?.prop"></test-comp>
我观察到的是,ngOnChanges
中的'something'setter和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>
按我预期的方式工作,未设置'something'值并且未调用ngOnChanges
。
这是一个Stackblitz示例,显示了相关行为:
使用Angular 7.2.1
也许我只是完全弄错了,但是行为似乎不一致