【问题标题】:Angular - How to subscribe to child route params only when the child route is activatedAngular - 如何仅在激活子路由时订阅子路由参数
【发布时间】:2018-12-09 12:01:43
【问题描述】:

我有分屏设计。仅当激活子路由时,我想从父路由访问文件夹 ID。下面的方法可以为我获取正确的参数,但是在我只显示父路由的初始加载中,我得到一个控制台错误:

无法读取 null 的属性“参数”

this.activatedRoute.firstChild.params.subscribe((urlParameters) => {
  this.folder_id = urlParameters['folderId'];
});

有没有办法只在孩子被激活后才激活上述内容?

【问题讨论】:

  • 这行得通吗? if(this.activatedRoute.firstChild) this.activatedRoute.firstChild.params.subscribe((urlParameters) => { this.folder_id = urlParameters['folderId']; });
  • 哈哈,确实如此。我不敢相信我没有想到这一点。 @ABOS,你绅士。如果你把它写成答案,我会接受的:)
  • 很高兴它工作:)

标签: angular routes angular-activatedroute


【解决方案1】:

你可以试试

 if(this.activatedRoute.firstChild) 
   this.activatedRoute.firstChild.params.subscribe((urlParameters) => { 
     this.folder_id= urlParameters['folderId']; 
   });

【讨论】:

    【解决方案2】:

    您可以订阅 routeParams 更改,但仅在 child 存在并且具有您需要的内容时触发。 ABOSes 版本不起作用,因为它不会在没有 firstChild 的情况下进行订阅,所以当您实际导航到 firstChild 时,订阅不会触发。

    我的版本将创建订阅,这将过滤有效事件。请注意,这很可能是更好的方法:https://stackoverflow.com/a/48979356/1980151

    this.route.params.subscribe(() => {
        if (this.route.firstChild && this.route.firstChild.snapshot.params['folderId']) {
            this.folderId = +this.route.firstChild.snapshot.params['folderId'];
        }
    });

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      相关资源
      最近更新 更多