how to get route parameters in angular2 RC5

2019-06-15 16:40发布

I have upgraded my angular2 project to RC5 using angular-cli@webpack.

I have provide routing as below:

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

and I am redirecting to designer Component using routerLink as :

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

Now It is getting redirected successfully and I am able to see param value in address bar of the browser.

Now I want to know , How can I access this parameter in DesignerComponent in angular2 RC5.

2条回答
【Aperson】
2楼-- · 2019-06-15 16:55

First import ActivatedRoute from @angular/router.

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

access it constructor as below :

constructor(private route: ActivatedRoute){            
}

subscribe to params change inside ngOnInit as below :

ngOnInit() {
  this.route.params.subscribe(params => {
    if (params['id']) {
    }
  });
}
查看更多
Emotional °昔
3楼-- · 2019-06-15 17:06

I believe you need to use the ActivatedRoute from the router to manipulate your parameter.

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

...

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

// TODO :: Add type
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
    });
}

Don't forget to import OnInit from @angular/core if you need it as well.

N.B : You can also use this.route.snapshot.params to access it synchronously.


EDITED :

  • Cleanup to avoid subscription because the NG2 router manages his subscriptions on his own.
  • Avoid using private variables that might be used in the HTML to avoid breaking AOT compilation.
  • Cleaned ROUTER_DIRECTIVES because it's deprecated.
  • Avoid using string literal : params['id'] => params.id
  • Type your parameter with TypeScript if you have it
查看更多
登录 后发表回答