在 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 中未定义)[重复]