我没有找到任何信息表明Angular 2服务是否支持生命周期钩子,无论是在官方文档还是在网络上都没有。大多数钩子没有意义,但至少ngOnInit()
可以非常有用。
实验表明,在@Injectable()
中使用ngOnInit()
会导致服务在引导期间被实例化,即使它没有用户,但不会被调用。以下是代码示例:
import { NgModule, Inject, Injectable, OnInit, Component } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser'
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
@Component({
template: 'test',
selector: 'my-component'
})
export class MyComponent {
}
@Injectable()
export class MyService /*implements OnInit*/ {
constructor() {
console.debug('constructing MyService');
}
ngOnInit(): void {
console.debug('MyService.ngOnInit');
}
}
@NgModule({
imports: [ BrowserModule ],
providers: [
MyService
],
declarations: [MyComponent],
bootstrap: [ MyComponent ]
})
class AppModule {
}
console.debug('bootstrapping');
platformBrowserDynamic().bootstrapModule(AppModule);
https://plnkr.co/edit/98Q9QqEexYoMRxP3r1Hw?p=info
这样设计是否有意?如果是,请进行文档说明。如果不是,则应予更改。
此问题源自这个(大部分已解决)的问题:
https://github.com/angular/angular/issues/13811
我不确定方案1(该问题未解决的部分)是否为有效代码。