Шаг 1:
Создайте директиву, как показано ниже, где activeLink - это класс с желаемым css:
@Directive({
selector: '[nav-link]'
})
export class NavigationDir implements OnChanges {
constructor(private element: ElementRef, private renderer: Renderer2) {
}
@Input() clickedLinkText:string;
ngOnChanges(){
this.renderer.removeClass(this.element.nativeElement,"activeLink");
if(this.element.nativeElement.innerText.toLowerCase()==this.clickedLinkText){
this.renderer.addClass(this.element.nativeElement,"activeLink");
}
}
}
Шаг 2:
Измените свои кнопки, как показанониже, т.е. добавьте атрибут nav-link, передайте $ event в ваш обработчик кликов и установите свойство ввода директивы
<button type="button" class="btn side_btn" (click)="YourClickHandler($event) nav-link [clickedLinkText]=selectedAnchorText">
<i class="fa fa-tasks" aria-hidden="true"></i>
<p>PROJECTS</p>
</button>
Шаг 3:
Добавьте новое свойство в файл TS, как показано ниже:
selectedAnchorText: string;
Шаг 4:
Измените весь обработчик OnClickEvent, как показано ниже:
YourClickHandler(event) {
this.selectedAnchorText=event.target.innerText.toLowerCase();
//Add your route logic below
}
Описание Когда вы нажмете кнопкуего обработчик событий будет запускаться и устанавливать значение свойства selectedAnchorText равным тексту или идентификатору нажатой кнопки, в зависимости от того, что вам нужно.Установка значения selectedAnchorText установит свойство ввода директивы clickedLinkText, которое, в свою очередь, вызовет хук директивы жизненного цикла ngOnChanges, в котором вы проверяете и добавляете активный класс к нажатой кнопке.
Я знаю, что ответ может быть намного лаконичнее и лучше.Пожалуйста, не стесняйтесь улучшать его.
Надеюсь, это поможет!