Angular 2组件构造函数与OnInit

时间:2016-03-07 13:53:56

标签: angular constructor ngoninit

如果我希望每次加载组件时都会发生函数x,无论是第一次加载,我都会导航到另一个站点并导航回来,或者是组件第五次加载。

我应该将函数x放入什么?组件构造函数或OnInit?

3 个答案:

答案 0 :(得分:97)

构造函数是typescript类的预定义默认方法。 Angular和constructor之间没有关系。通常我们使用constructor来定义/初始化一些变量,但是当我们有与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() 
  }
}

有关详情,请参阅 Difference between Constructor and ngOnInit

答案 1 :(得分:29)

第一个(构造函数)与类实例化有关,与Angular2无关。我的意思是构造函数可以在任何类上使用。您可以为新创建的实例添加一些初始化处理。

第二个对应于Angular2组件的生命周期钩子:

    输入或输出绑定值更改时
  • ngOnChanges被调用
  • 在第一个ngOnInit 之后调用
  • ngOnChanges

所以如果你的函数的初始化处理依赖于组件的绑定(例如用ngOnInit定义的组件参数),你应该使用@Input,否则构造函数就足够了......

答案 2 :(得分:22)

constructor()是打字稿功能,需要new SomeClass()。构造函数确保在类层次结构中正确的字段初始化顺序。

ngOnInit是一个Angular2生命周期方法,当Angular完成构建组件并在评估绑定并第一次更新输入后,由Angular调用。

另见Difference between Constructor and ngOnInit