获取路线中的当前参数 - Angular 4

时间:2017-10-25 20:37:45

标签: angular typescript frontend

我想在Angular路由器发生变化时立即收到当前参数。

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

Angular文档有类似的内容:

file { '/home/user_name/scripts':
  ensure  => 'directory',
  recurse => true,
  source  => 'puppet://modules/mymodule/user_name-scripts',
  links   => 'follow'
}

但是,这对我来说并不起作用,或者至少,将某些东西抽象为其他方法或服务会很好。

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

1 个答案:

答案 0 :(得分:3)

使用新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);
})

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