2016-09-01 6 views
12

RouterLinkActive funktioniert nicht, wenn ein dynamisch generierter Link beim Navigieren durch die App selbst verwendet wird.RouterLinkActive für RouterLink mit Parametern (/ dynamic)

z.B. In meiner Top-Navigation habe ich das;

<a [routerLink]=['user', currentUser.name] routerLinkActive='active'>{{currentUser.name}}</a> 

Während die hardcoded Version funktionieren würde.

<a [routerLink]=['user','bob']>View Bobs Account</a> 

Ein Plunk für dieses ist hier; https://plnkr.co/edit/BYKMucE3Y75uJSpV5VWx?p=preview

Klicken Sie auf "John" und "Dynamic Router Link Name =" und "John" sollte beide aktiv sein. Dies funktioniert manchmal beim ersten Klick, wenn dies der Fall ist, dann klicken Sie wieder auf "Home", der Klick erneut auf "John". Sie sehen nur den hartcodierten Link als aktiv registriert, obwohl die hrefs identisch sind.

Ist dies geplant/unmöglich? oder setze ich etwas falsch?

+0

Haben Sie das gelöst? Auch dein Punker stürzt ab, wenn du auf die Links klickst. – Pylinux

Antwort

2

Ihre HTML ändern, wie unten:

import {Router} from '@angular/router'; 

isActive(instruction: any[]): boolean { 
    // Set the second parameter to true if you want to require an exact match. 
    return this.router.isActive(this.router.createUrlTree(instruction), false); 
} 

in Ihrem HTML:

<a [class.active]="isActive(['user', currentUser.name])"> 

<a [routerLink]=['user', currentUser.name] routerLinkActive='active'>{{currentUser.name}}</a> 

Sie auch Why Angular2 routerLinkActive sets active class to multiple links?

+0

routerLinkActive vs [routerLinkActive] scheint keine Auswirkungen auf das Ergebnis zu haben. War auch nicht besorgt, dass mehrere Links aktiv sind, das ist in diesem Fall in Ordnung, sie sollten beide aktiv sein, anstatt nur eines. – ct5845

+0

Eigentlich [routerLinkActive] ist nicht richtig, es wird funktionieren, aber Fehler einige Zeit werfen. – ranakrunal9

15

In Ihrer Komponente überprüfen Router.isActive() documentation on angular.io

+2

Dies sollte die akzeptierte Antwort sein. Zur gleichen Zeit, warum funktioniert RouterLinkActive nicht so? –

+2

Es scheint, dass router.isActive nun einen zweiten booleschen Parameter benötigt, der angibt, ob die Übereinstimmung genau ist oder nicht. –

1

routerLinkActive wird beim ersten Laden und nur bei Änderung der Route ausgewertet. Es wird nicht erneut ausgewertet, wenn die Verknüpfung geändert wird. Daher funktionieren dynamisch generierte Links nicht mit routerLinkActive. Die obige Lösung von Victor Bredihin funktioniert, da die Komponentenfunktion beim Rendern ausgewertet wird.

Verwandte Themen