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的区别