2016-07-24 76 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 => {...}) 

應該做的伎倆。

我不知道爲什麼它必須如此醜陋。我預計這會按照你的方式工作。