向 Angular router.navigate 添加参数

Posted

技术标签:

【中文标题】向 Angular router.navigate 添加参数【英文标题】:Adding Parameter to Angular router.navigate 【发布时间】:2017-12-02 22:16:12 【问题描述】:

首先,我不确定这是否是实现我想要的正确方法.. 我正在尝试将如下导出绑定添加到 router.navigate()-method:

<call [caller]="caller"></call>

问题是我从不使用该指令,而是通过路由器对其进行寻址:

acceptCall() 
   this.router.navigate(["call"]);

如何在 acceptCall() 方法中实现与第一个示例相同的导出绑定? 我已经添加了一个 Input() 变量并使用 queryParams 进行了尝试,如下所示:

@Input() caller: Caller;
acceptCall(caller) 
    this.router.navigate(["call"], queryParams: caller);

但这不起作用。

【问题讨论】:

几乎!试试this.router.navigate(["call", caller]); 对我不起作用,我必须修改我的 RouterModule.forRoot 吗?我的目前看起来像: path: 'call', component: CallComponent 嗯,是的,path: 'call/:caller' 你可以在你的子组件中使用this.route.params.subscribe((params: Params) =&gt; this.myParam = params['caller']); 来获取它(路由是一个ActivatedRoute) 我已经更新了我的模块,但还没有完全了解其他内容 :D 你在哪里声明 Params ,myParam?您能否提供该类的完整代码示例作为答案? @reveN:你的代码是如何组织的并不是很明显。如果您清楚地说明您提供的所有代码的位置,会更容易为您提供帮助。 【参考方案1】:

按照我的 cmets 你必须:

1 - 重新定义您的路线

path: 'call/:caller', component: MyComponent 

2 - 在父组件中更改导航

this.router.navigate(["call", caller]);

3 - 在子组件中,获取参数

import  ActivatedRoute  from '@angular/router';
// code until ...
myParam: string;
constructor(private route: ActivatedRoute) 
// code until ...
ngOnInit() 
    this.route.params.subscribe((params: Params) => this.myParam = params['caller']);

【讨论】:

mhh 我已经按照你说的做了所有事情,但是当我调用该方法时,我的路由器根现在回到了我的“家”组件而不是调用组件 我使用像this.router.navigate(['../user', id], relativeTo: this.route ); 这样的调用来确保它会重定向到正确的网址。可以试试吗? 我创建了一个模拟调用程序并收到以下错误:错误:无法匹配任何路由。 URL 段:'call;Id=1;Name=Frodo%20Baggins;Tel=12345%2F678910;Company=The%20Fellowship%20of%20the%20Ring' 哦!然后使用服务或父子关系。路由参数不是为此而设计的。 为了完整起见,还需要从@angular/router 导入Params

以上是关于向 Angular router.navigate 添加参数的主要内容,如果未能解决你的问题,请参考以下文章

带有查询参数Angular 5的router.navigate

angular2 router.navigate 在 auth0 回调中

Angular & Eslint - this.router.navigate(['/']) 的 no-floating-promises 错误

Angular 8 应用程序在使用 router.navigate 时无法检索表单字段值

防止在Angular中的单个router.navigate调用上滚动到顶部

Angular router.navigate w/ route guard 在组件上时不起作用