En angle 2, Routeur.isActiveRoute ne travaille pas pour la première fois

j'utilise un routeur.isActiveRoute pour déterminer quelle route est active. Pour la première fois je parcours vers home link ou menu link , la route change mais la classe active n'est pas ajoutée. active class est ajouté au deuxième clic.

je pense que c'est un bug de la directive Router dans angular2. S'il vous plaît dites-moi pourquoi et comment le résoudre?

app.ts

...
@Component({
    selector: 'app',
    directives: [ROUTER_DIRECTIVES],
    templateUrl: 'app/components/app.html',
    styleUrls: ['app/components/app.css']
})
@RouteConfig([
    { path: '/', component: Home, name: 'Home'},
    { path: '/menu', component: Menu, name: 'Menu'}
])
class AppComponent {
    constructor(public router: Router) {
    }
    isActiveRoutes(routes) {
        return this.router.isRouteActive(this.router.generate(routes));
    }
}

app.html

<a [routerLink]="['Home']">
    <div class="icon-box" [class.active]="isActiveRoutes(['/Home'])">
        <i class="icon ion-ios-list-outline"></i>
    </div>
</a>
<a [routerLink]="['Menu']">
    <div class="icon-box" [class.active]="isActiveRoutes(['/Menu'])">
        <i class="icon ion-ios-bookmarks-outline"></i>
    </div>
</a>
<router-outlet></router-outlet>

Merci

0
demandé sur Quy Tang 2016-01-14 19:59:05

2 réponses

la solution est simple. Angular2-polyfills en mouvement.JS en dessous du système.js script tag a fait l'affaire. Il s'agit d'un numéro connu #6140 . Il y a aussi un demo link .

@Component({
  selector: 'my-app', 
  providers: [],
  template: `
    <div>
        <ul>
          <li>
            <a [routerLink]="['First']">First</a>
          </li>
          <li>
            <a [routerLink]="['Second']">Second</a>
          </li>
          <li>
            <a [routerLink]="['Third']">Third</a>
          </li>
        </ul>
    </div>
    <router-outlet></router-outlet>
  `,
  styles: [".router-link-active { background-color: red; }"],
  directives: [ROUTER_DIRECTIVES]
})
@RouteConfig([
  {path: "/first", name: "First", component: FirstComponent},
  {path: "/second", name: "Second", component: SecondComponent},
  {path: "/third", name: "Third", component: ThirdComponent}
])
export class App { }
2
répondu Quy Tang 2016-01-16 05:40:47

si vous utilisez Angular 4+, vous devriez utiliser la directive routerLinkActive="active" au lieu d'utiliser toute autre procédure complexe pour déterminer quelle est la route active lorsque la route actuelle n'est pas connue.

      <li class="nav-item" routerLinkActive="active">
        <a class="nav-link" routerLink="/home">Home</a>
      </li>
      <li class="nav-item" routerLinkActive="active">
        <a class="nav-link" routerLink="/about-us">About Us</a>
      </li>
      <li class="nav-item" routerLinkActive="active">
        <a title="Contact Us" class="nav-link " routerLink="/contact-us">Contact</a>
      </li>
0
répondu asmmahmud 2017-10-11 10:26:14