how to highlight active nav-item?


Topic: how to highlight active nav-item?

davout asked 10 months ago

A beginner question...

How do I highlight the active nav-link so that it is clearly visible to the end user?

In the example shown below 'Tasks' is the active routerlink, but you can't see that from the nav bar display

enter image description here

Here is the code...

<ul class="nav justify-content-center lighten-4 ">
  <li class="nav-item" routerLinkActive="active" style="margin-left: 20px; margin-right: 20px">
    <a class="nav-link" [routerLink]="['tasks']"><h5><b>Tasks</b></h5></a>
  </li>
  <li class="nav-item" routerLinkActive="active" style="margin-left: 20px; margin-right: 20px">
    <a class="nav-link" [routerLink]="['habits']"><h5><b>Habits</b></h5></a>
  </li>
  <li class="nav-item" routerLinkActive="active" style="margin-left: 20px; margin-right: 20px">
    <a class="nav-link" [routerLink]="['projects']"><h5><b>Projects</b></h5></a>
  </li>
  <li class="nav-item"  routerLinkActive="active" style="margin-left: 20px; margin-right: 20px">
    <a class="nav-link " [routerLink]="['goals']"><h5><b>Goals</b></h5></a>
  </li>
  <li class="nav-item"  routerLinkActive="active" style="margin-left: 20px; margin-right: 20px">
    <a class="nav-link" [routerLink]="['dashboard']"><h5><b>Dashboard</b></h5></a>
  </li>
</ul>

Konrad Stępień staff answered 10 months ago

Hi @davout,

the property routerLinkActive adds class when specific path is active. For example, add these styles for your project:

.active {
    color: red;
    font-weight:bool;
}

more info about routerLinkActive: https://angular.io/api/router/RouterLinkActive


Ankita Singh commented 2 months ago

On click of arrow to go back or forward in browser the navigation links become active as expected. But is there a way to call the onclick event function of the links when it becomes active? Or is there a way to detect a change in navbar active tab?


Arkadiusz Idzikowski staff commented 2 months ago

The routerLinkActive directive should update the active state of the element also when you click on a specific link.

You can use (click) event on navigation links to detect if they were clicked.


Ankita Singh commented 2 months ago

Hi, thanks for addressing. I need to understand if the user clicks on the back/forward button in the browser toolbar and the navigation link changes to previous selected value. Is there a way to capture the change in typescript (other than router.events subscription)?


Arkadiusz Idzikowski staff commented 2 months ago

@Ankita Singh If you use routerLinkActive it should detect route change even on browser back/forward navigation and update the active item accordingly. I think the easier way would be to subscribe to router events, another way could be to use MutationObserver API to observe class change on specific element/elements.


Please insert min. 20 characters.
Status

Answered

Specification of the issue
  • User: Free
  • Premium support: No
  • Technology: Angular
  • MDB Version: 9.3.1
  • Device: PC
  • Browser: Chrome
  • OS: Windows 10
  • Provided sample code: No
  • Provided link: No
Tags