【问题标题】:Angular2 Router navigate with multiple params issueAngular2路由器导航多个参数问题
【发布时间】:2016-07-24 10:01:16
【问题描述】:

我正在尝试让 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 中的代码没有运行!!为什么??

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

感谢您的帮助!

【问题讨论】:

  • 所以我设置了这个确切的东西,它对我有用。我正在使用@angular/router 版本0.2.0。所以我不认为这是导航功能中的错误。什么触发filter() 被调用?是按钮点击吗?这就是我在示例中将其连接到的内容。
  • 你可能还想看看this issue

标签: angular angular2-routing


【解决方案1】:

this comment类似的问题上,建议你针对父路由器获取参数。

在你的情况下,像

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

应该可以解决问题。

我不知道为什么它必须如此丑陋。我希望这会像您那样工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-08
    • 2016-11-14
    • 2016-11-29
    • 2017-02-26
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2017-09-25
    相关资源
    最近更新 更多