RouterLinkActive is not working when using a dynamically generated link when navigating through the app itself.
e.g. in my top navigation i have this;
<a [routerLink]=['user', currentUser.name] routerLinkActive='active'>{{currentUser.name}}</a>
Whilst the hardcoded version would work.
<a [routerLink]=['user','bob']>View Bobs Account</a>
A plunk for this is here; https://plnkr.co/edit/BYKMucE3Y75uJSpV5VWx?p=preview
Click on "John" and "Dynamic Router Link Name = " and "John" should both be active. This sometimes work on the first click, if so, then click back to "Home", the click again on "John", you'll see only the hardcoded link is registered as active, even though the hrefs are identical.
Is this designed/impossible? or am i setting something incorrectly?
routerLinkActive is evaluated on initial load and only when route is changed. It is no re-evaluated when the link is changed. Hence, dynamically generated link do not work with routerLinkActive. Victor Bredihin's solution above works as the component function is evaluated during rendering.
Change your html as below :
You can also check Why Angular2 routerLinkActive sets active class to multiple links?
Accepted answer didn't work for me and I just wanted to highlight top level route matches so I used:
and:
In your component:
In your HTML:
Router.isActive()
documentation on angular.io