在组件初始化期间使用router.navigate()设置查询参数的正确方法是什么(没有触发组件重新加载)?我尝试了一些变化,但都失败了 . 我有一个带@Routes的app组件,一个带有@Routes和子组件的父组件 . 应用程序路由是'/:evt' - > ParentComponent,父路由是'/ child' - > ChildComponent . 子组件有

routerOnActivate(curr:RouteSegment) {
    this.route = curr;
}
ngOnInit() {
    ...
    this.updateUrl();
    ...
}
updateUrl() {
    var query = { x=1, ... };
    // Option 1
    this.router.navigate(['child', query]);
    // Option 2
    this.router.navigate(['./child', query]);
    // Option 3 - full /:evt/child
    this.router.navigate(['/', this.event.id , 'child', query]);
    // Option 4
    this.router.navigate(['child', query], this.route);
}
  • 选项1和2使组件无法加载或至少使其处于错误状态 . 但是日志中没有错误 .

  • 选项3将重新加载完整路线并跳转到页面顶部 . 所以不能使用,但似乎工作 .

  • 选项4触发组件的重新加载 . 所以我得到激活,初始化,激活,初始化,然后2x router.changes的最终url,没有路由更改事件的初始路由/:evt / child,只有/:evt / child; x = 1;两次 . 接下来是关于来自_recognize的子组件上缺少路由的例外 .

我也尝试在子构造函数中调用router.navigate(),但是这触发了一个崩溃Chrome的无限组件重载循环:) .

在Angular 1中,您可以在组件init期间调用$ location.search(query)来更新没有组件重新加载的查询参数 . 在Angular 2 RC 1(重启/重置/重做候选;)中,我找不到等效的呼叫 .