How to get parameter on Angular2 route in Angular way?

前端 未结 2 1954
鱼传尺愫
鱼传尺愫 2020-12-04 17:38

Route

const appRoutes: Routes = [
    { path: \'\', redirectTo: \'/companies/unionbank\', pathMatch: \'full\'},
    { path: \'companies/:ban         


        
相关标签:
2条回答
  • 2020-12-04 18:02

    As of Angular 6+, this is handled slightly differently than in previous versions. As @BeetleJuice mentions in the answer above, paramMap is new interface for getting route params, but the execution is a bit different in more recent versions of Angular. Assuming this is in a component:

    private _entityId: number;
    
    constructor(private _route: ActivatedRoute) {
        // ...
    }
    
    ngOnInit() {
        // For a static snapshot of the route...
        this._entityId = this._route.snapshot.paramMap.get('id');
    
        // For subscribing to the observable paramMap...
        this._route.paramMap.pipe(
            switchMap((params: ParamMap) => this._entityId = params.get('id'))
        );
    
        // Or as an alternative, with slightly different execution...
        this._route.paramMap.subscribe((params: ParamMap) =>  {
            this._entityId = params.get('id');
        });
    }
    

    I prefer to use both because then on direct page load I can get the ID param, and also if navigating between related entities the subscription will update properly.

    Source in Angular Docs

    0 讨论(0)
  • 2020-12-04 18:04

    Update: Sep 2019

    As a few people have mentioned, the parameters in paramMap should be accessed using the common MapAPI:

    To get a snapshot of the params, when you don't care that they may change:

    this.bankName = this.route.snapshot.paramMap.get('bank');
    

    To subscribe and be alerted to changes in the parameter values (typically as a result of the router's navigation)

    this.route.paramMap.subscribe( paramMap => {
        this.bankName = paramMap.get('bank');
    })
    

    Update: Aug 2017

    Since Angular 4, params have been deprecated in favor of the new interface paramMap. The code for the problem above should work if you simply substitute one for the other.

    Original Answer

    If you inject ActivatedRoute in your component, you'll be able to extract the route parameters

        import {ActivatedRoute} from '@angular/router';
        ...
        
        constructor(private route:ActivatedRoute){}
        bankName:string;
        
        ngOnInit(){
            // 'bank' is the name of the route parameter
            this.bankName = this.route.snapshot.params['bank'];
        }
    

    If you expect users to navigate from bank to bank directly, without navigating to another component first, you ought to access the parameter through an observable:

        ngOnInit(){
            this.route.params.subscribe( params =>
                this.bankName = params['bank'];
            )
        }
    

    For the docs, including the differences between the two check out this link and search for "activatedroute"

    0 讨论(0)
提交回复
热议问题