我创建了一个 mat 选项卡组并使用 ng-for 使用路由器插座加载选项卡,当我添加新选项卡并导航 url 时,我的新路由组件被构建了两次,并且以前的选项卡内容被新内容替换。
Sample Code:
mat-tab-group (selectedTabChange)="tabClick($event)" [selectedIndex]="selected.value"
(selectedIndexChange)="onIndexChanged($event)" animationDuration="0ms">
<mat-tab *ngFor="let tab of tabs; let i = index" [label]="tab">
<ng-template mat-tab-label>
{{tab.Name}}
</ng-template>
<router-outlet></router-outlet>
</mat-tab>
</mat-tab-group>
打字稿代码:
导出类 MyTabComponent 实现 OnInit { 公共选项卡:任何;// 我在 HTML 中循环的属性 public selected = new FormControl();
ngOnInit() {
this.myservice.NewTabArrived.subscribe(
(newTab) => {
let url = newTab.Url // URL of comp to load in new tab
this.tabs.push({tabName:newTab.Name}); // This is use din ngFor in html
this.router.navigate([url], {relativeTo: this.activatedRoute });
});
问题是当第一次订阅函数调用它时,它会在选项卡下成功加载路由。下次调用时,指定 url 的组件被构造两次,之前的 tab 内容显示新的 tab 内容(之前的 tab 内容丢失)。
首次订阅时 ----- Tab1 (selected) | ------ Tab1 内容
当第二次订阅被调用时
表 1 | Tab2(已选) |
Tab2 内容
当我单击 tab1 时,我看到 tab2 内容(我面临的问题)
Tab1(选中) | 选项卡2
Tab2 内容
有人可以帮忙吗,为什么在添加第二个标签时,我以前的标签内容也加载了第二个组件。
提前致谢。