Angular 2组件构造函数与OnInit
如果我希望函数x在每次组件加载时都发生,无论是第一次,我导航到另一个站点并导航回来,或者是组件加载的第五次。
我应该把什么函数x? 组件构造函数或OnInit?
构造函数是打字稿类的预定义的默认方法。 Angular和constructor
之间没有关系。 通常我们使用constructor
来定义/初始化一些variables,但是当我们有与Angular的绑定相关的任务时,我们转向Angular的ngOnInit
生命周期钩子。 在构造函数调用之后调用ngOnInit
。 我们也可以在构造函数中做同样的工作,但是最好使用ngOnInit
来启动Angular的绑定。
为了使用ngOnInit
我们必须从核心库中导入这个钩子:
import {Component, OnInit} from '@angular/core'
然后我们用导出类实现这个接口(这不是强制实现这个接口,但通常我们做了)。
使用两个示例:
export class App implements OnInit{ constructor(){ //called first time before the ngOnInit() } ngOnInit(){ //called after the constructor and called after the first ngOnChanges() } }
有关更多详细信息,请参阅构造函数和ngOnInit之间的区别
第一个(构造函数)与类实例相关,与Angular2无关。 我的意思是可以在任何类上使用构造函数。 你可以在这里为新创build的实例进行一些初始化处理。
第二个对应于Angular2组件的生命周期钩子:
- input或输出绑定值更改时调用
ngOnChanges
-
ngOnInit
在第一个ngOnChanges
之后被调用
所以你应该使用ngOnInit
如果你的函数的初始化处理依赖于组件的绑定(例如用@Input
定义的组件参数),否则构造函数就足够了…
constructor()
是一个打字稿function,并被称为new SomeClass()
。 构造函数确保在类层次结构中正确的字段初始化顺序。
ngOnInit
是一个Angular2生命周期方法,当它完成构build组件并且在第一次评估绑定和更新input之后,由Angular调用。
另请参见构造函数和ngOnInit的区别