我正在使用BehaviorSubject
充当子组件状态的
state = new BehaviorSubject<any>({transform: 'translate3d(0, 0, 0)'});
styleState = this.state.asObservable();
async
在子组件模板中,我使用管道订阅状态
<div>{{ styleState | async | json }}</div>
然后我用滚动事件更新子组件状态
ngOnInit() {
this.zone.runOutsideAngular(() => {
fromEvent(this.el.nativeElement, 'scroll').pipe(
tap((e: any) => {
this.zone.run(() => {
this.state.next({ scrollTop: e.target.scrollTop });
});
})
).subscribe();
});
}
现在在父组件中,更改检测由子组件滚动事件触发
ngAfterViewChecked() {
console.log('Parent View Checked!');
}
问题是逻辑依赖于滚动事件,我不希望它触发父组件中的更改检测。知道我OnPush
在父组件和子组件中都使用更改检测策略
这是正常的吗?我怎样才能避免它?
这是一个最小的复制https://stackblitz.com/edit/angular-hkwvy4?file=src%2Fapp%2Fhello.component.ts