2016-06-05 3 views
2

Probieren Sie die neue Angular 2.0.0-rc.1 ohne die abgebildeten Sachen. Ich möchte eine Komponente mit oder ohne Pfadparameter arbeiten. Da ich die Syntax für den optionalen Parameter nicht herausfinden konnte (zB /detail/:id? oder /detail[/:id] würde nicht funktionieren), blieb mir die Option, separate Routen zu deklarieren. Je nach Auftrag ich die @Routes erklären, Ich schlage eine AusnahmeAngular2 rc1 - Ist die Reihenfolge der @Routes-Deklaration wichtig (optionaler Parameter)?

Warum ist das gut:

@Routes([ 
    { component: HeroDetailComponent, path: '/detail/:id' }, 
    { component: HeroDetailComponent, path: '/detail' } 
]) 

und das ist nicht:

@Routes([ 
    { component: HeroDetailComponent, path: '/detail' }, 
    { component: HeroDetailComponent, path: '/detail/:id' } 
]) 

Wenn parametrisierte URL zugreifen: localhost/detail/1 Ich erhalte eine Ausnahme:

EXCEPTION: Error: Uncaught (in promise): Component 'HeroDetailComponent' does not have route configuration

Komponentenklasse als Referenz:

import {OnActivate, RouteSegment, Router} from "@angular/router"; 
import {Component, Input} from '@angular/core'; 
import {Hero} from '../model/hero'; 
import {HeroService} from "../model/hero.service"; 

@Component({ 
    templateUrl: 'hero-detail.component.html', 
    selector: 'my-hero-detail' 
}) 

export class HeroDetailComponent implements OnActivate{ 
    constructor(private heroService: HeroService, 
       private router: Router){} 
    @Input() 
    hero: Hero = new Hero(); 

    routerOnActivate(curr: RouteSegment) { 
    if(curr.getParam('id') == null) 
     return; 

    let id = +curr.getParam('id'); 
    this.heroService.get(id) 
     .then(hero => this.hero = hero); 
    } 
} 

Antwort

1

Ja, die Reihenfolge ist wichtig. Spezifischere Routen sollten zuerst an erster Stelle stehen, weniger spezifische Routen.

Dies ist nicht beabsichtigt, aber eine Beschränkung der aktuellen @angular/router.

Es ist derzeit nicht klar, wie sie mit dem Router voranschreiten werden. Wenn Sie gerade mit der Migration von @angular/router-deprecated beginnen, ist es wahrscheinlich besser zu warten, bis die Router-Strategie klar ist.

Verwandte Themen