Angular 2组件构造函数与OnInit

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() 
    } 
} 

更多细节也见 Difference between Constructor and ngOnInit

+1

但你没有回答实际的问题。我们应该在这种情况下使用哪一个..? –

+3

在构造函数调用之后不会调用ngOnInit,它们之间有ngOnChanges:https://angular.io/guide/lifecycle-hooks – Hazlo8

第一个(构造函数)与类实例化有关,并且与Angular2无关。我的意思是一个构造函数可以用于任何类。您可以为其新创建的实例进行一些初始化处理。

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

  • ngOnChanges当输入或输出结合值改变
  • ngOnInit在第一ngOnChanges

所以之后调用被称为如果函数的初始化处理依赖于组件的绑定(例如使用定义的组件参数),则应该使用),否则构造函数就足够了...

+0

有什么情况下使用'ngOnInit'在构造将是坏? – dman

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

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

参见Difference between Constructor and ngOnInit

+0

你是100%的权利,我为你upvote。在我看来,如果我们将'ngOnInit'描述为React的'componentDidMount',那么所有的混淆都将消失。但说实话,对于开发者,我们只需要只有一个初始化短语,不管它是否被调用。非常古老的方式是使用像类一样的函数来构建一个组件类,所以注入作为参数传递并且只需要一个'$ onInit'。 Ng2 +不是一件美丽的艺术品。 – stanleyxu2005

+0

构造函数是一种TypeScript语言功能,具有一定的限制。没有什么Angular可以做到这一点。 –