Всякий раз, когда изменяется значение navigationSelected $, выдается следующее:
Ошибка означает, что значение изменилось дважды.
Когда у вас есть эти ошибки в селекторе, ономожет быть очень трудно исправить их.В этом нет ничего плохого.Проблема в том, что хранилище меняет состояние до и после рендеринга представления, и это, вероятно, означает, что существует диспетчеризация, которая должна произойти после вызова setTimeout()
.
Проблема в том, что это делает некоторыедругое место в вашем исходном коде зависит от изменения состояния, чтобы защитить представление от появления ошибки.Это не идеально.
Альтернативой является выдача значения с использованием EventEmitter
.
<profile-navigation *ngIf="(navigationSelectedSafe$ | async) == navigationLayout[0].location"></profile-navigation>
public navigationSelectedSafe$ = new EventEmitter<any>(true); // must be true
this.navigationSelected$.subscribe(res => navigationSelectedSafe$.emit(res));
Когда вы используете EventEmitter(true)
, он будет выдавать значения после setTimeout()
, который защищает видот ошибок изменений.
Вы также можете искать вокруг вашего исходного кода для мест, где вы используете @Output()
, и посмотреть, если изменение его на EventEmitter(true)
решит проблему.
Обычно, когда вы видите эту ошибку на селекторе.Это означает, что вы выполняете большую работу, связанную с состоянием, за пределами представлений.Компонент, который должен передать, что что-то изменилось, должен использовать @Output()
, но если этот компонент отправляет, то он обходит процесс просмотра.Здесь вы сталкиваетесь с этими проблемами.