在 angular2 中的 ngOnInit 之后,在构造函数中订阅服务

Posted

技术标签:

【中文标题】在 angular2 中的 ngOnInit 之后,在构造函数中订阅服务【英文标题】:subscribing to a service in constructor is executing after ngOnInit in angular2 【发布时间】:2017-09-01 00:55:21 【问题描述】:

众所周知,构造函数首先执行..但是当我尝试在构造函数中订阅服务时,该服务在 ngOnInit 之后执行。但是我想在执行 ngOnInt 之前订阅服务。你能帮帮我吗?

这是我的示例代码

constructor(private otherRoleService: OtherRoleService) 
      this.data = [
                    "roleid" : "0"
                  ]; 
this.otherRoleService.getOtherRoles(this.data).subscribe(res => console.log('constructor'), err => this.fail(err));

ngOnInit()
 console.log('OnInit')

【问题讨论】:

你需要了解异步。您在 ngOnInit 之前订阅。但是您稍后会从订阅中收到第一个异步事件。就像,如果你订阅了一份时事通讯,然后吃了一个吐司,你的吐司就会在你收到时事通讯的第一封邮件之前被吃掉,可能一两天后。 @JBNizet 这不取决于吐司的大小吗?我的意思是,如果你有一个用全尺寸面包制成的吐司,可能需要一段时间才能吃完 有一个关于事件循环的好视频,它将帮助您了解 javascript 的工作原理以及为什么您在 onInit 之后订阅数据:youtube.com/watch?v=8aGhZQkoFbQ 【参考方案1】:

您正在订阅一个事件,并且是在正确的时间进行的,唯一的问题是该事件在一段时间后被触发。

如果您使用的是角度路由器,您可以检查resolve 功能,这将确保在加载组件之前解析您的 observable

【讨论】:

以上是关于在 angular2 中的 ngOnInit 之后,在构造函数中订阅服务的主要内容,如果未能解决你的问题,请参考以下文章

为啥我应该在构造函数而不是 ngOnInit 中创建我的 Angular2 响应式表单?

Angular2,测试和解析数据:如何测试 ngOnInit?

Angular2,TypeScript,如何读取/绑定属性值到组件类(在 ngOnInit 中未定义)[重复]

Angular2 生命周期钩子方法中的变更检测

Angular 2 在 ngOnInit 承诺中推送数组后不刷新视图

Angular 2 在 ngOnInit 承诺中推送数组后不刷新视图