Angular 2组件构造函数与OnInit
如果我希望函数x在每次组件加载时发生,无论是第一次,我导航到不同的站点并向后导航,或者是组件加载的第五次。Angular 2组件构造函数与OnInit
我应该把函数x放入什么位置?组件构造函数或OnInit?
构造是打字稿类的预定义的默认方法。 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()
}
}
第一个(构造函数)与类实例化有关,并且与Angular2无关。我的意思是一个构造函数可以用于任何类。您可以为其新创建的实例进行一些初始化处理。
第二个对应于Angular2组件的生命周期钩:
-
ngOnChanges
当输入或输出结合值改变 -
ngOnInit
在第一ngOnChanges
所以之后调用被称为如果函数的初始化处理依赖于组件的绑定(例如使用定义的组件参数),则应该使用),否则构造函数就足够了...
有什么情况下使用'ngOnInit'在构造将是坏? – dman
constructor()
是一个打字稿功能,并要求new SomeClass()
。构造函数确保在类层次结构中正确的字段初始化顺序。
ngOnInit
是一个Angular2生命周期方法,Angular2在构建组件之后以及在第一次评估绑定和更新输入之后由Angular调用。
你是100%的权利,我为你upvote。在我看来,如果我们将'ngOnInit'描述为React的'componentDidMount',那么所有的混淆都将消失。但说实话,对于开发者,我们只需要只有一个初始化短语,不管它是否被调用。非常古老的方式是使用像类一样的函数来构建一个组件类,所以注入作为参数传递并且只需要一个'$ onInit'。 Ng2 +不是一件美丽的艺术品。 – stanleyxu2005
构造函数是一种TypeScript语言功能,具有一定的限制。没有什么Angular可以做到这一点。 –
但你没有回答实际的问题。我们应该在这种情况下使用哪一个..? –
在构造函数调用之后不会调用ngOnInit,它们之间有ngOnChanges:https://angular.io/guide/lifecycle-hooks – Hazlo8