У меня есть то, что, вероятно, должно быть очень распространенным сценарием:
Я отображаю счетчик ожидания занятости, пока состояние NgRx не сигнализирует о завершении операции.
В шаблоне:
<my-loading-spinner *ngIf="loading$ | async"></my-loading-spinner>
В коде компонента:
this.loading$ = store.pipe(select(operationStatus), map(loadingFn));
... где функция loadingFn
отображает состояние operationState
NgRxзначение в логическое значение.
Данные результата для этого представления загружаются в состояние NgRx прямо рядом с operationStatus
в том же вызове в редукторе:
return set(
STATUS, EntityStatus.loadingSuccess, // the operationState
myEntityAdapter.addAll(action.payload.tokens, state) // the data
) as MyEntityState;
Этот результатdata - это длинный список объектов, который проходит сортировку в компоненте, а затем обрабатывается с помощью *ngFor
с нетривиальным содержимым.
Поэтому неудивительно, что у меня возникает проблема: счетчик ожидания занятости заметно уходит до того, как на экране появляется таблица отображаемых данных.
Есть ли какой-либо тип "некоторых специфических данных"?-has-закончено-рендеринг "событие, которое можно отслеживать, чтобы я мог заставить мой счетчик ожидания заняты оставаться до тех пор, пока таблица данных не будет полностью обработана?
2019.03.01 Обновление
Я попробовал подход, предложенный @ConnorsFan: я изменил свой шаблон, чтобы использовать новый ненаблюдаемый *ngIf="viewLoading"
, инициализированный как public viewLoading = true;
Затем в теле подписки я просто установил его как ложное:
this.dataRows.changes.subscribe(() => {
this.viewLoading = false;
});
Я попробовал этот подход, но он не имел значения;прядильщик все еще был спрятан преждевременно.Возможно, я не правильно применил рецепт?Я должен отметить, что это также приводило к ошибке времени выполнения, всегда вызывающему ExpressionChangedAfterItHasBeenCheckedError
( Предыдущее значение: 'ngIf: true'. Текущее значение: 'ngIf: false' )