【问题标题】:Unable to trigger ngOninit and route.params upon redirection using RouterLink使用 RouterLink 重定向时无法触发 ngOninit 和 route.params
【发布时间】:2019-08-11 19:51:32
【问题描述】:

我正在尝试使用 routerLink 从一个页面重定向到另一个页面,但重定向的链接不会触发 ngOnInit() 方法以及 ActivatedRoute 订阅。重定向页面然后冻结,但控制台上没有错误。

这是我的 HTML

<a [routerLink]="route(value.id)">link</i></a>

那么这是我的component.ts,它返回url

route = (id: number) => this.routeService.view(id);

这是重定向的组件edit.ts

ngOnInit() {
  this.route.paramMap.pipe(
    takeUntil(this.onDestroy$),
    map(params => console.log(params))
).subscribe(x => 'do something')

}

【问题讨论】:

  • 您能否编辑问题并解释您想要实现的目标以及实际发生的情况?因为这个问题现在还不清楚。
  • 重定向的组件是渲染还是根本不加载?
  • 是的,重定向页面加载
  • [routerLink] 需要一个字符串或字符串数​​组,而不是函数调用。它不会评估函数调用。尝试将[routerLink] 替换为(click)
  • @JasonWhite 它需要是 [routerLink] 以便我可以重定向到另一个页面。

标签: angular router angular-activatedroute


【解决方案1】:

我做了一些小技巧,我使用了 NgZone。 routerLink 指令似乎在 Angular 区域之外运行。所以我没有使用[routerLink]="route(value.id)",而是使用了(click)="route(value.id)"。这就是现在的样子

HTML:

<a (click)="route(value.id)">link</i></a>

组件:

constructor(private ngZone: NgZone){}

route = (id: number) { 
    const link = this.routeService.view(id);
    this.ngZone.run(() => this.router.navigate(link));
}

感谢回复..

【讨论】:

    猜你喜欢
    • 2019-09-13
    • 2018-02-02
    • 1970-01-01
    • 2017-10-15
    • 2017-05-11
    • 2019-03-29
    • 2011-11-29
    • 2017-04-14
    • 2014-09-25
    相关资源
    最近更新 更多