将参数添加到Angular router.navigate

rev*_*veN 7 binding router typescript angular

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

<call [caller]="caller"></call>
Run Code Online (Sandbox Code Playgroud)

问题是我从不使用该指令,而是通过路由器来解决它:

acceptCall() {
   this.router.navigate(["call"]);
}
Run Code Online (Sandbox Code Playgroud)

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

@Input() caller: Caller;
acceptCall(caller) {
    this.router.navigate(["call"], {queryParams: caller});
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

小智 10

根据我的意见,您必须:

1 - 重新定义您的路线

{path: 'call/:caller', component: MyComponent }
Run Code Online (Sandbox Code Playgroud)

2 - 更改父组件中的导航

this.router.navigate(["call", caller]);
Run Code Online (Sandbox Code Playgroud)

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']);
}
Run Code Online (Sandbox Code Playgroud)

  • 为了完整性,您还需要从@ angular/router导入Params (4认同)
  • 我使用了像 `this.router.navigate(['../user', id], {relativeTo: this.route });` 这样的调用来确保它会重定向到正确的 URL。你能尝试一下吗? (2认同)