如果我希望每次加载组件时都会发生函数x,无论是第一次加载,我都会导航到另一个站点并导航回来,或者是组件第五次加载。
我应该将函数x放入什么?组件构造函数或OnInit?
答案 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()
}
}
答案 1 :(得分:29)
第一个(构造函数)与类实例化有关,与Angular2无关。我的意思是构造函数可以在任何类上使用。您可以为新创建的实例添加一些初始化处理。
第二个对应于Angular2组件的生命周期钩子:
ngOnChanges
被调用ngOnInit
之后调用ngOnChanges
所以如果你的函数的初始化处理依赖于组件的绑定(例如用ngOnInit
定义的组件参数),你应该使用@Input
,否则构造函数就足够了......
答案 2 :(得分:22)
constructor()
是打字稿功能,需要new SomeClass()
。构造函数确保在类层次结构中正确的字段初始化顺序。
ngOnInit
是一个Angular2生命周期方法,当Angular完成构建组件并在评估绑定并第一次更新输入后,由Angular调用。