Angular2路由器导航多个params问题

时间:2016-07-24 10:01:16

标签: angular angular2-routing

我试图让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"}

我可以看到网址相应更改,但params.subscribe中的代码无法运行!!为什么?

请注意,如果我更改param.search属性中的值,则会触发params.subscribe中的代码。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

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

在你的情况下,像

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

应该这样做。

我不知道为什么它必须如此丑陋。我希望这可以按你的方式工作。