Как избежать обнаружения изменений в родительском компоненте, вызванном событием прокрутки дочернего компонента - PullRequest
1 голос
/ 27 июня 2019

Я использую BehaviorSubject, который действует как состояние для дочернего компонента

state = new BehaviorSubject<any>({transform: 'translate3d(0, 0, 0)'});
styleState = this.state.asObservable();

В шаблоне дочернего компонента я подписываюсь на состояние, используя async pipe

<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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...