У меня есть список запросов панели расширения угловых материалов:
@ViewChildren(MatExpansionPanel)
matExpansionPanelQueryList: QueryList<MatExpansionPanel>;
и простой массив:
questions: [];
Панели расширения генерируются с *ngFor
: упрощенно, например:
<ng-container *ngFor="let question of questions>
<mat-expansion-panel
...
Когда я расширяю массив вопросов, я хочу открыть последнюю панель расширения.
extendQuestion() {
this.matExpansionPanelQueryList.changes.subscribe(
change => {
change.last.open();
}
);
this.questions.push('some-new-item');
}
Это прекрасно работает - я вставляю элемент в массив,
панель ExpansionPanels перерисовывается, создается новая панель Panel, и она фактически открывается - моя проблема в том, что она генерирует в консоли следующую ошибку:
ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has
changed after it was checked. Previous value: 'mat-expanded: false'. Current
value: 'mat-expanded: true'.
Есть ли способ избежать этого?
Я пытался использовать changeDetectorRef
и markForCheck()
в подписке, но сообщение об ошибке не исчезло (и, честно говоря, я на 100% уверен, что именно здесь проблема).
Обновление : Пример проблемы с Stackblitz (нажмите кнопку "+")