在初始页面加载时获取路径参数

时间:2017-03-30 03:32:58

标签: angular

我是第一次尝试获取路由参数,而我似乎无法弄清楚如何正确使用ActivatedRoute

根据API和文档,我试图在页面加载时获取路径参数。

ngOnInit() {
    const orgSlug: Observable<string> = this.route.params.map(params => {console.log(params); return params.org});
}

在页面加载时,不记录任何内容。我的假设是页面加载,我会得到params对象的初始状态。我在ngOnInit和构造函数中都尝试了它,但两者都没有结果。我知道我可以检查快照,但是我必须为初始状态和任何更改状态重复代码,这感觉不对。

我是否误解了观察者或ActivatedRoute的工作原理?

2 个答案:

答案 0 :(得分:1)

你应该在params之后使用subscribe()。

constructor(private route: ActivatedRoute) {}

ngOnInit() {
   this.route.params.subscribe(params => {
       this.id = params['id']; // do this if it is a number +params['id']

    });
  }

此外,您可能想要取消订阅(可选)

private sub:any;
    constructor(private route: ActivatedRoute) {}

ngOnInit() {
    this.sub = this.route.params.subscribe(params => {
       this.id = params['id']; // do this if it is a number +params['id']

    });
  }

当您的组件即将销毁

时取消订阅
ngOnDestroy() {
    this.sub.unsubscribe();
  }

虽然angular会为你做垃圾收集,但为了安全起见,最好还是手动取消订阅。

答案 1 :(得分:0)

你应该在构造函数中使用,你应该订阅params,它将在页面呈现之前执行并且你的params可用,因为这些是异步调用将它放在onInit中是不可取的

constructor(private route:ActivatedRoute) {  
    this.route.params.subscribe(params => {

         console.log(params);

    }).map(params => {
           console.log(params); 
           return params.org}
    );
});