Angular 4/5 - 路线paramMap vs params

Sho*_*ota 21 typescript angular

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

1)使用 paramMap

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

2)使用params:

    ngOnInit() {
      this.sub = this.route.params.subscribe(params => {
        this.id = +params['id'];
      });
    }
Run Code Online (Sandbox Code Playgroud)

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

小智 25

根据文件:

还有两个较旧的房产.他们的能力低于他们的替代者,气馁,并且可能在未来的Angular版本中被弃用.

params - 一个Observable,包含特定于路由的必需参数和可选参数.请改用paramMap.

简单高效!

  • `this.activatedRoute.snapshot.paramMap.get('id');`https://angular.io/api/router/ParamMap#get (3认同)
  • 作为参考,这里是所述文档的链接:[路由器 - 激活的路线](https://angular.io/guide/router#activated-route)。这是路由器功能指南的链接。不幸的是,[ActivatedRoute.params 属性](https://angular.io/api/router/ActivatedRoute#params) 的参考文档并没有说不鼓励使用“paramMap” (2认同)

Mab*_*abd 10

注:paramMap提供更多的便利与路线参数玩。有以下三种方法:

  1. 已()
  2. 得到()
  3. 得到所有()

已() :

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

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

得到() :

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

this.activatedRoute.paramMap.subscribe(params => {
  console.log(params.get('id'));
})
Run Code Online (Sandbox Code Playgroud)

得到所有() :

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

this.activatedRoute.paramMap.subscribe(params => {
  console.log(params.getAll('foo'));
})
Run Code Online (Sandbox Code Playgroud)


Saj*_*ran 9

实际上没有区别但是params很老,可能很快就会被弃用

paramMap

一个Observable,包含特定于路径的必需参数和可选参数的映射.地图支持从同一参数中检索单个和多个值.

queryParamMap

一个Observable,包含可用于所有路由的查询参数的映射.该映射支持从查询参数中检索单个和多个值.