【问题标题】:Get current parameter in route - Angular 4获取路线中的当前参数 - Angular 4
【发布时间】:2018-04-07 02:06:12
【问题描述】:

我只想在 Angular 路由器更改时接收当前参数。

根据另一篇 SO 帖子,如果路由器导航到同一组件中的另一个参数,我的组件将不会自动刷新,但是在激活路由时我无法获取参数(因此我可以更新视图)。

Angular 文档有这样的内容:

  ngOnInit() {
    this.hero$ = this.route.paramMap
      .switchMap((params: ParamMap) =>
        this.service.getHero(params.get('id')));
  }

但是,这对我不起作用,或者至少,拥有一些不抽象为其他方法或服务的东西会很好。

是否有一种简单直接的方式来订阅当前参数?

【问题讨论】:

    标签: angular typescript frontend


    【解决方案1】:

    新的 paramMap 最简单的方法:

    import { ActivatedRoute } from '@angular/router';
    ...
    constructor(private activeRoute: ActivatedRoute) { 
           this.subscription = this.activeRoute.paramMap
            .subscribe(params => {
                if(params.get('id') !== this.myParam) {
                    this.myParam= params.get('id');
                    //Do things with new parameter - e.g. reload data
                }
            });
    }
    

    您还可以使用params.getAllparams.keys 来获取有关可用参数的信息。

    如果ActivatedRoute 没有填充任何参数,您可以通过订阅所有路由器事件并查看参数的去向进行故障排除:

    this.routeChangeDetection = this.router.events.subscribe((event) => {
        console.log(this.activeRoute);
        console.log(this.activeRoute.snapshot);
        console.log(this.activeRoute.snapshot.params);
        console.log(this.activeRoute.snapshot.children);
    })
    

    如果您的参数被加载到子/相关组件中,而不是正在寻找参数更改的组件,这可能很有用。

    【讨论】:

    • 做一个快速的 Plunker 会不会很困难?订阅似乎没有为我触发,但我仍在进行故障排除..
    • OK 差不多了 - params 对象在 lambda 中不存在.. 有没有办法从 events 中提取它?
    • 我仍然遇到各种麻烦 - 尽管这对我开始调试很有帮助,谢谢!由于某种原因,快照没有参数id。它似乎包含在this.activeRoute.snapshot.children.params 中,我不知道为什么
    • 另外,我将尝试创建一个 Plunker 并用它更新答案 - Angular 文档在“我只想做 X”时出奇地缺乏
    • 好的,所以activatedRoute父级属于拥有导航的组件。所以我把它移过来了..几乎就在那里..
    猜你喜欢
    • 1970-01-01
    • 2017-07-21
    • 2017-07-19
    • 2023-03-24
    • 2020-03-11
    • 1970-01-01
    • 2018-10-12
    • 2018-05-18
    • 2014-01-06
    相关资源
    最近更新 更多