Angular 4/5 - 路线paramMap vs params

时间:2017-12-14 08:56:43

标签: angular typescript

我正在尝试在我的Angular 5应用程序中获取URL参数,我发现了两种方法:

1)使用paramMap

    ngOnInit() {
      this.hero$ = this.route.paramMap
        .switchMap((params: ParamMap) =>
          this.service.getHero(params.get('id')));
    }

2)使用params

    ngOnInit() {
      this.sub = this.route.params.subscribe(params => {
        this.id = +params['id'];
      });
    }

有什么区别吗?哪一个是最好的做法?

3 个答案:

答案 0 :(得分:20)

根据文件:

  

仍有两个较旧的属性。他们的能力低于他们的替代者,气馁,并且可能在未来的Angular版本中被弃用。

     

params - 包含特定于路径的必需参数和可选参数的Observable。请改用 paramMap

简单而有效!

答案 1 :(得分:8)

实际上没有区别,但 params 已经过时了,很快就会被弃用

paramMap

  

包含必需和可选地图的Observable   特定于路线的参数。地图支持检索单个   和来自同一参数的多个值。

queryParamMap

  

一个Observable,包含可用的查询参数的映射   所有路线。地图支持检索单个和多个值   来自查询参数。

答案 2 :(得分:1)

注意: paramMap 为使用route参数提供了更多便利。 具有以下三种方法:

  1. 有()
  2. get()
  3. getAll()

有(): 示例:

    this.router.navigate(['example', id]); 

     this.activatedRoute.paramMap.subscribe(params => {
          console.log(params.has('id')); // true
        })

get(): 示例:

       this.router.navigate(['example', "id","another ID"]); 

     this.activatedRoute.paramMap.subscribe(params => {
          console.log(params.get('id'));
        })

getAll(): 示例:

     this.router.navigate(['example', { foo: ['bar', 'baz'] } ]);

     this.activatedRoute.paramMap.subscribe(params => {
          console.log(params.getAll('foo'));
        })