我想在Angular路由器发生变化时立即收到当前参数。
根据另一个SO帖子,如果路由器导航到同一组件中的另一个参数,我的组件将不会自动刷新,但是我在路由被激活时无法获取参数(因此我可以更新视图)。
Angular文档有类似的内容:
file { '/home/user_name/scripts':
ensure => 'directory',
recurse => true,
source => 'puppet://modules/mymodule/user_name-scripts',
links => 'follow'
}
但是,这对我来说并不起作用,或者至少,将某些东西抽象为其他方法或服务会很好。
是否有一种简单直接的方式来订阅当前参数?
答案 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.getAll
或params.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);
})
如果你的参数被加载到子/相关组件而不是寻找参数更改的组件,这可能很有用。