2016-08-26 10 views
9

Ich habe mein angular2 Projekt auf RC5 mit [email protected] aktualisiert.Wie bekomme ich Routenparameter in angular2 RC5

Ich biete haben Routing wie folgt:

const appRoutes: Routes = [ 
    { path: 'project-manager', component: ProjectManagerComponent }, 
    { path: 'designer/:id', component:DesignerComponent } , 
    {path: '',redirectTo: '/project-manager',pathMatch: 'full'} 
]; 

und ich Designer Component bin Umleitung mit Router als:

<a [routerLink]="['/designer',page._id]"><i class="fa fa-eye fa-fw"></i></a> 

Jetzt erfolgreich immer Es wird umgeleitet, und ich bin in der Lage param Wert zu sehen in der Adressleiste des Browsers.

Jetzt möchte ich wissen, wie kann ich auf diesen Parameter in DesignerComponent in angular2 RC5 zugreifen.

Antwort

13

Ich glaube, Sie brauchen die ActivatedRoute vom Router zu benutzen, um Ihre zu manipulieren Parameter.

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

... 

constructor(private route: ActivatedRoute, ...) { 
} 

value: any; // -> wanted parameter (use your object type) 

ngOnInit() { 
    // get URL parameters 
    this.route.params.subscribe(params => { 
     this.value = params['id']; // --> Name must match wanted parameter 
    }); 
} 

Vergessen Sie nicht OnInit von @angular/core zu importieren, wenn Sie es auch benötigen.


EDITED:

  • Cleanup Abonnement zu vermeiden, weil die NG2-Router seine Abonnements auf seinem eigenen verwaltet.
  • Vermeiden Sie die Verwendung von privaten Variablen, die möglicherweise in HTML verwendet werden, um zu vermeiden, dass die AOT-Kompilierung unterbrochen wird.
  • Gereinigt ROUTER_DIRECTIVES, weil es veraltet ist.
+2

Färben Sie mich verwirrt. Warum muss ich einen festen Wert in der aktuellen aktiven URL abonnieren? Es ist nicht so, als würde sich das ändern. Ich bin irgendwie überrascht, dass es sowas wie @Input nicht gibt, um mit so etwas umzugehen. –

+1

Update: Für Interessierte: Es besteht keine Notwendigkeit, das Abonnement von der beobachtbaren und abmelden in einem OnDestroy-Ereignis zu erhalten. Die Route schafft es alleine. Sie können tatsächlich 'this' schneiden. –

+0

Editierte Antwort, um auf dem Laufenden zu sein! –

4

Erster Import ActivatedRoute von @angular/router.

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

Zugriff es Konstruktor wie folgt:

constructor(private route: ActivatedRoute){    
} 

abonnieren Wechsel innerhalb ngOnInit params wie folgt:

ngOnInit() { 
    this.route.params.subscribe(params => { 
    if (params['id']) { 
    } 
    }); 
} 
Verwandte Themen