2016-07-24 64 views
1

我试图让Angular2新路由器工作,我到目前为止大部分,除了一个恼人的问题,我不能解决。Angular2路由器导航与多个参数问题

由于某些原因,当我使用具有2个参数(矩阵参数)的路由器navigate函数时,如果其中一个参数已经填充并且未更改,即使其他参数发生更改,它也不会运行订阅代码。

例子:

import {ActivatedRoute, Router} from '@angular/router'; 
@Component({.... }) 

export class AnalystSearch implements OnInit, OnDestroy { 
    querySubscriber: any; 
    filterString:string; 
    constructor(private route:ActivatedRoute, private router:Router) { 
    } 

    ngOnInit() { 
     this.querySubscriber = this.route.params.subscribe(params => { 
      //Do Things 
     }); 
    } 

    ngOnDestroy() { 
     this.querySubscriber.unsubscribe(); 
    } 

    filter():void { 

     let params:any = this.route.snapshot.params; 
     params["filter"] = encodeURIComponent(this.filterString); 
     params["search"] = params["search"] || ""; 

     this.router.navigate(["/analysts", {search: params.search, filter: params.filter}]); 
    } 
} 

通常当filter()被称为PARAMS已经包含了搜索值(意为 - {search: "someRandomString"}和变化是,我添加/修改过滤属性(所以它看起来像 - {search: "someRandomString", filter: "someFilterString"}

我可以看到相应的URL发生变化,但在params.subscribe代码没有运行!!为什么??

需要注意的是,如果我更改价值210属性会触发代码params.subscribe

感谢您的帮助!

+0

因此,我设置了这个确切的东西,它适用于我。我正在使用'@ angular/router'版本'0.2.0'。所以我不相信这是导航功能中的一个错误。什么触发'filter()'被调用?它是一个按钮点击?这就是我在我的例子中连接到的东西。 – Pace

+0

你可能还想看看[这个问题](https://github.com/angular/angular/issues/9970) – Pace

回答

2

对于类似问题的this comment,建议您定位父路由器以获取参数。

在你的情况,像

this.router.routerState.parent(this.route).params.subscribe(params => {...}) 

应该做的伎俩。

我不知道为什么它必须如此丑陋。我预计这会按照你的方式工作。