【发布时间】:2016-07-11 09:08:54
【问题描述】:
是否可以为带有 @Injectable() 注释的服务设置生命周期挂钩?
我本来希望在这样的服务上调用生命周期挂钩,但事实证明我错了,它似乎只在 @Component 上工作。当依赖注入创建/销毁服务时,有没有办法在服务中获得通知?
import {Component, Injectable, OnInit, OnDestroy} from 'angular2/core';
@Injectable()
export class SampleService implements OnInit, OnDestroy {
ngOnInit() {
console.log("OnInit")
}
ngOnDestroy() {
console.log("OnDestroy")
}
}
@Component({
selector: "sample",
template: "<div>Sample Component</div>",
providers: [ SampleService ]
})
export class SampleComponent {
constructor() { private _sampleService: SampleService }
}
【问题讨论】:
-
这不是另一个问题的重复,因为它还提到了 OnDestroy,而另一个问题只提到了 OnInit。 OnDestroy 的文档实际上声明服务应该支持它。我也被证明是错误的。
-
就您而言,我认为您采用的方法可能是错误的。 Injectables/Services 只是获取数据等的工具。如果您想要一个生命周期钩子让服务在启动时执行某些操作,我建议将
ngOnInit钩子放在您的主应用程序组件上,这将调用注入的服务以启动它。基本上使用主应用程序组件来启动服务,这将使您保持原样。这都是关于视角的。 ;) -
@GuyPark:这基本上就是我作为解决方法所做的。我曾希望服务的生命周期更加自动化,但我理解所涉及的问题,所以是的,这是一个有效的解决方案。
标签: dependency-injection angular