是否有可能以角度收集来自ActivatedRoute的所有参数?

时间:2017-07-26 00:53:11

标签: angular angular-routing angular-router

我正在创建和角度4应用程序。碰巧我需要从我的URL获取不同深度级别的参数,这导致我获取我的参数的方式不统一。

假设我们有这个网址:

https://mysite/companies/:companyID/cups/:cupId/drawings/:drawId

通常,根据角度文档,我们需要做类似的事情:

ngOnInit() {
this.activatedRoute.parent.parent.params.subscribe((params: Params) => 
{this.companyId = params['companyId'];
});
this.activatedRoute.parent.params.subscribe((params: Params) => 
{this.cupId = params['cupId'];
});
this.activatedRoute.params.subscribe((params: Params) => 
{this.drawId = params['drawId'];
});
}

请注意,这是考虑到我们在DrawDetailComponent中,这意味着我们所在的组件是此层次结构中的最后一个子组件。

另请注意,根据您在此层次结构中的深度,您需要将.parent添加到您的activatedRoute中,使其处于正确的位置,您可以成功获取您正在寻找的参数。

那么,是否可以通过相同的调用来获取网址中的所有参数?

类似的东西:

this.activatedRoute.parent.parent.params.subscribe((params: Params) => 
    {this.companyId = params['companyId'];
    {this.cupId = params['cupId'];
    {this.drawId = params['drawId'];
});

我们希望有一种统一的,而不是深度相关的方法来从我们的URL中检索所有参数。

实际上我们也试过了类似的东西:

const property = 'companyId';
this.activatedRoute.pathFromRoot.forEach((item) => {
  if (item.snapshot.params.hasOwnProperty(property)) {
    item.params.subscribe((params: ParamMap) => {
      this.companyId = params[property];
    });
  }
});

但我们希望找到更好,更通用,可测试的方式。

通常,在像Django这样的框架中,开发人员能够通过一个步骤收集网址所需的所有信息。在Angular的情况下订阅可以自动处理这些参数的变化,但恕我直言,它远非舒适+可测试。

1 个答案:

答案 0 :(得分:1)

认为你应该能够做到这样的事情:

this.activatedRoute.params.subscribe(params => {
    this.companyId = params['companyId'];
    this.cupId = params['cupId'];
    this.drawId = params['drawId'];
});

我在我的应用程序中运气与此类似。请注意,我不会向父母求助。激活的路线应该具备您所需要的一切。

希望这有帮助!