Injectable类实例化时不会调用ngOnInit
当Injectable
类被parsing时为什么不ngOnInit()
?
码
import {Injectable, OnInit} from 'angular2/core'; import { RestApiService, RestRequest } from './rest-api.service'; @Injectable() export class MovieDbService implements OnInit { constructor(private _movieDbRest: RestApiService){ window.console.log('FROM constructor()'); } ngOnInit() { window.console.log('FROM ngOnInit()'); } }
控制台输出
FROM constructor()
像OnInit()
这样的生命周期钩子可以处理指令和组件。 他们不与其他types的工作,如在你的情况下的服务。 从文档:
组件有一个由Angular自己pipe理的生命周期。 Angular创build它,渲染它,创build和渲染它的子项,当它的数据绑定属性发生变化时检查它,并在从DOM中删除它之前销毁它。
Directive和组件实例有一个生命周期,Angular创build,更新并破坏它们。
我不知道所有的生命周期钩子,但至于销毁ngOnDestroy实际上是当它的提供者被销毁时(例如一个组件提供的Injectable)在Injectable上调用。
从文档( https://angular.io/docs/ts/latest/api/core/index/OnDestroy-class.html ):
在指令,pipe道或服务被销毁时调用的生命周期钩子。
以防万一任何人有兴趣销毁像这样的问题: 在angular2中的服务的生命周期方法
服务的生命周期方法已经被其他人所覆盖,我一般分享我关于生命周期方法的概念
Angular 4生命周期方法
ngOnInit()
, ngOnChanges()
和ngOnDestroy()
等是生命周期方法。 ngOnChanges()
将在ngOnInit()
之前被第一个调用,当绑定属性的值发生变化时,如果没有变化,它将不会被调用。 ngOnDestroy()
在组件被移除时被调用。 要使用它, OnDestroy
需要由类实现。