【发布时间】:2023-03-25 23:00:01
【问题描述】:
我有一个 Angular 材质扩展面板查询列表:
@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 得到重新渲染,一个新的面板被创建并且它实际上打开了 - 我的问题是它在控制台中生成以下错误:
ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has
changed after it was checked. Previous value: 'mat-expanded: false'. Current
value: 'mat-expanded: true'.
有什么办法可以避免这种情况吗?
我曾尝试在订阅中使用 changeDetectorRef 和 markForCheck(),但错误消息并没有消失(老实说,我 100% 确定这里的确切问题是什么)。
【问题讨论】:
-
请创建一个 stackblitz 演示
-
这可能有助于解决您的问题并让您深入了解change detection operations
-
@AbhishekKumar 添加了一个示例。