Непонятно, почему вы думаете, что должны избавиться от маршрутизации, чтобы использовать навигацию по вкладкам. Вкладка навигации и маршрутизация не являются несовместимыми. Чтобы использовать MatTabNavBar и MatTabLink с маршрутизацией, настройте маршрутизацию приложения так, чтобы каждая «вкладка» представляла собой маршрут, добавьте параметры маршрутизатора к элементам mat-tab-link и используйте выход маршрутизатора для размещения содержимого вкладки. Это должно быть намного проще, чем вы запланировали, поскольку вам не нужно беспокоиться о «создании» динамического содержимого вкладки и использовании кнопки «Назад».
Вот код, выбранный из базового примера, полная демонстрация включена StackBlitz :
Template
<nav mat-tab-nav-bar [backgroundColor]="background">
<a mat-tab-link routerLink="test-one" routerLinkActive #rla1="routerLinkActive" [active]="rla1.isActive">Test One</a>
<a mat-tab-link routerLink="test-two" routerLinkActive #rla2="routerLinkActive" [active]="rla2.isActive">Test Two</a>
</nav>
<router-outlet></router-outlet>
Компоненты
import {Component} from '@angular/core';
/**
* @title Basic use of the tab nav bar with routing
*/
@Component({
selector: 'tab-nav-bar-basic-example',
templateUrl: 'tab-nav-bar-basic-example.html',
styleUrls: ['tab-nav-bar-basic-example.css'],
})
export class TabNavBarBasicExample {}
@Component({
selector: 'test-one',
template: '<p>Test One</p>'
})
export class TestOne {}
@Component({
selector: 'test-two',
template: '<p>Test Two</p>'
})
export class TestTwo {}
Модуль приложения
const appRoutes: Routes = [
{ path: '', redirectTo: 'test-one', pathMatch: 'full' },
{ path: 'test-one', component: TestOne },
{ path: 'test-two', component: TestTwo }
];
@NgModule({
imports: [
RouterModule.forRoot(
appRoutes
),
...
],
entryComponents: [TabNavBarBasicExample],
declarations: [TabNavBarBasicExample, TestOne, TestTwo],
bootstrap: [TabNavBarBasicExample],
providers: []
})
export class AppModule { }