【发布时间】:2021-03-08 20:28:58
【问题描述】:
免责声明:我的问题是关于this question 的一个特例。我想在最后一个位置创建一个带有“+”标签的标签组,它可以创建更多标签,除了这个“+”标签之外没有初始标签。链接问题的The only answer 提供了一个带有三个初始选项卡的工作堆栈闪电战,这不是我的情况。如果我删除那些初始选项卡,我会得到下面描述的错误行为。
问题: 鉴于组中最初除了“+”选项卡之外没有任何选项卡,如果我单击此“+”选项卡,确实会创建一个新选项卡,但是焦点保持在“+”选项卡上,而不是按预期跳转到新创建的选项卡上。它继续使用更多新标签。 但是如果我创建第一个选项卡,选择它,然后单击“+”选项卡,那么新选项卡会在创建后按预期选择。
我在这里做错了什么?是什么引发了这种看似不一致的行为?
HTML:
<div>
<span class="example-input-label"> Selected tab index: </span>
<mat-form-field>
<input matInput type="number" [formControl]="selected">
</mat-form-field>
<br>
<span class="example-input-label"> New tab name: </span>
<mat-form-field>
<input matInput type="text" [formControl]="name">
</mat-form-field>
</div>
<mat-tab-group [selectedIndex]="selected.value"
(selectedIndexChange)="selected.setValue($event)">
<mat-tab *ngFor="let tab of tabs; let index = index" [label]="tab">
Contents for {{tab}} tab
<button mat-raised-button
class="example-delete-tab-button"
(click)="removeTab(index)">
Delete Tab
</button>
</mat-tab>
<mat-tab disabled>
<ng-template mat-tab-label>
<button mat-icon-button (click)="addTab(name.value)">
<mat-icon>add_circle</mat-icon>
</button>
</ng-template>
</mat-tab>
</mat-tab-group>
打字稿:
export class TabGroupDynamicExample {
tabs = [];
selected = new FormControl(0);
name = new FormControl('');
addTab(tabName) {
if (!this.tabs.includes(tabName)) {
this.tabs.push(tabName);
this.selected.setValue(this.tabs.indexOf(tabName));
}
}
removeTab(index: number) {
this.tabs.splice(index, 1);
if (this.tabs.length > 0 && this.selected.value === this.tabs.length) {
this.selected.setValue(this.selected.value - 1);
}
}
}
【问题讨论】: