На него уже был дан ответ, но я столкнулся с той же проблемой, но исправил ее с помощью другого решения, так как другие ответы не соответствовали моим предпочтениям.Вот что я сделал:
(Вот рабочий стек стека: https://stackblitz.com/edit/angular-cxynsa)
Я объявил свои вкладки для навигации. И объявил SelectionModel.
public tabs = [
{value: 'Stepper', link: './stepper'},
{value: 'Quotations', link: './quotations'},
{value: 'Designs', link: './designs'},
{value: 'Elements', link: './elements'},
];
private selection = new SelectionModel();
Вмой HTML это выглядит так:
<nav mat-tab-nav-bar class="tabs-group">
<a *ngFor="let tab of tabs" (click)="select(tab)" mat-tab-link [routerLink]="tab.link"
class="header-btn" [ngClass]="{focus: isSelected(tab)}">
<a>{{tab.value}}</a>
</a>
</nav>
<router-outlet class="router-outlet-small"></router-outlet>
Я получил два метода, которые будут делать выбор. Я также хочу выбрать первую вкладку по умолчанию. Метод select () выберет вкладку, isSelected () метод позаботится о CSS в операторе [ngClass] на вкладке HTML.
ngOnInit() {
this.selection.select(this.tabs[0]); // Will select the first tab.
}
select(tab) {
if (!this.selection.isSelected(tab)) {
this.selection.clear(); // Only one tab can be selected in this way
this.selection.select(tab);
}
}
isSelected(tab): boolean {
return this.selection.isSelected(tab);
}
Метод isSelected () вернет true / false, что вызовет класс стилей для header-btn.focus.что показано ниже в моей CSS.
.header-btn {
// My css
}
.header-btn.focus {
opacity: 1;
}