在Angular中将字符串作为路由参数传递而不进行编码

eca*_*ain 8 angular2-routing angular

我试图使用此代码传递一个字符串:

  this.router.navigate(['/systems', params.toString()]);
Run Code Online (Sandbox Code Playgroud)

然后将route参数附加到API调用的URL.该params.toString()change_user=2258.但是,当它通过浏览器发送时,它将更改为change_user%3D2558URL.当我使用开发人员工具查看发送给API的内容时,它已更改为NaN.
如何通过路由器传递字符串,以便我可以直接将其附加到我的API字符串?

编辑:变量params是类型URLSearchParams().这就是我试图提取参数的方式:

this.route.paramMap.switchMap((params: ParamMap) => 
this.httpService.getSites(+params.get('params')))
.subscribe(sites => this.sites = sites);
Run Code Online (Sandbox Code Playgroud)

eca*_*ain 11

所以这就是我修复它的方法:

我不得不这样根本就被取出++params.get()调用.显然,它的作用是尝试将其转换为数字.现在我可以params.toString()直接传递给我了.


0mp*_*rdy 6

添加带有参数的路由定义,如Angular 2 路由文档中所述

{ path: 'hero/:id', component: HeroDetailComponent }
Run Code Online (Sandbox Code Playgroud)

选项1

然后您将能够导航到该路线

let id = 2258;
this.router.navigate(['/hero', id]);
Run Code Online (Sandbox Code Playgroud)

并使用ActivatedRoutein@angular/router来提取参数,如文档中所述

let id = this.route.snapshot.paramMap.get('id');
Run Code Online (Sandbox Code Playgroud)

选项2

使用router.navigateByUrl()方法(此处的文档

router.navigateByUrl('/hero/2258');
Run Code Online (Sandbox Code Playgroud)