Здравствуйте, я работаю над большим приложением, и у меня возникли некоторые проблемы с обнаружением изменений.Я постараюсь объяснить мои настройки как можно лучше.
Родительский компонент ts:
Использование changeDetection: ChangeDetectionStrategy.OnPush
У меня есть переменная, котораянаблюдаемая
loaderOverlay$: Observable<boolean>;
this.loaderOverlay$ = this.store.pipe(
select(selectors.loaderOverlaySelector)
);
Эта переменная обновляется в результате действия rxjs дочернего компонента.Затем проходит процесс rxjs.(Действие -> Редуктор -> Селектор)
Родительский компонент HTML
<div *ngif="(loaderOverlay$ | async)"></div>
Дочерний компонент № 1 (где я отправляю мое действие):
myFunction() {
this.store.dispatch(new actions.LoaderOverlay(true));
}
Моя проблема в том, что как только я отправляю действие, *ngif
очень шатко.Кажется, он работает не так, как я хочу (отправьте действие, измените значение на true, чтобы появился div).Это очень странно, потому что если я console.log(action.payload)
в редукторе, значение фактически обновляется, но *ngif
не работает.И что еще более странно, когда я наводю курсор мыши на какой-то другой компонент, кажется, что он срабатывает.
Я потратил много времени на это, и я думаю, что сузил его, чтобы изменить обнаружение, потому что в родительскомкомпонент, если я делаю:
ngAfterViewChecked(){
this.changeDetector.detectChanges();
}
Кажется, это работает для меня.Моя проблема с этим заключается в том, что ngAfterViewChecked
запускается огромное количество раз, и я боюсь проблем с производительностью.
Кто-нибудь сталкивался с этой проблемой раньше?Или у кого-нибудь есть предложения относительно того, что происходит и что я могу сделать, чтобы решить эту странную проблему?
Спасибо!