Я пытаюсь условно добавить значок к ярлыку вкладки мат, чтобы использовать его для удаления вкладки, так же, как работают вкладки Google Chrome:
<mat-tab *ngFor="let tab of tabs; let i = index"
label="{{tab.id}}">
<ng-template mat-tab-label>
{{tab.value}}
<mat-icon *ngIf="i > 0" class="tab-icon" //<< the problem is this *ngIf
(click)="removeTab(i)">{{tab.icon}}</mat-icon>
</ng-template>
<record-search *ngIf="i == 0" (onOpenEmergencyCase)="openCase($event)" class="tab-icon"></record-search>
<emergency-record *ngIf="i > 0" [emergencyCaseId]="tab.emergencyCaseId" class="tab-icon"></emergency-record>
</mat-tab>
Но это вызывает a ExpressionChangedAfterItHasBeenCheckedError.
Проблема связана только с приведенной ниже строкой и только с * ngIf:
<mat-icon *ngIf="i > 0" class="tab-icon"
Если я удаляю * ngIf, он работает правильно. Есть (возможно) связанный с этим вопрос здесь и открытый вопрос по github здесь , но я не могу понять, отличается ли это от других?
Мой компонент код:
tabs = [];
selected = new FormControl(0);
ngOnInit()
{
this.tabs.push({"id":0, "value": "Search", "emergencyCaseId": 0, "icon":""});
}
Я также пытался безрезультатно:
tabs = [{"id":0, "value": "Search", "emergencyCaseId": 0, "icon":""}];
selected = new FormControl(0);
В настоящий момент я пытаюсь обойти это, добавив проверку в мою функцию removeTabs ():
removeTab(index: number) {
//TODO find out why the ngif in the mat-label causes and error and fix
if(index > 0 && index < this.tabs.length){
this.tabs.splice(index, 1);
}
}
Что работает, однако это означает, что на содержимое моего ярлыка влияет (потому что теперь есть пустой значок), и мне нужно взломать CSS, чтобы добавить поле для выравнивания ярлыка :
Вероятно, я смогу соединить блики стека, если это тоже поможет ..