Angular 角度2组件构造函数与OnInit

Angular 角度2组件构造函数与OnInit,angular,constructor,ngoninit,Angular,Constructor,Ngoninit,如果我希望函数x在每次加载组件时都发生,无论是第一次,我导航到不同的站点并返回,还是第五次加载组件 我应该把函数x放在什么地方?组件构造函数或OnInit?第一个(构造函数)与类实例化相关,与Angular2无关。我的意思是构造函数可以用于任何类。您可以对新创建的实例进行一些初始化处理 第二个对应于Angular2组件的生命周期挂钩: 当输入或输出绑定值更改时,将调用ngOnChanges 在第一个ngOnChanges 因此,如果函数的初始化处理依赖于组件的绑定(例如,使用@Input定义

如果我希望函数x在每次加载组件时都发生,无论是第一次,我导航到不同的站点并返回,还是第五次加载组件

我应该把函数x放在什么地方?组件构造函数或OnInit?

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

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

  • 当输入或输出绑定值更改时,将调用
    ngOnChanges
  • 在第一个
    ngOnChanges
因此,如果函数的初始化处理依赖于组件的绑定(例如,使用
@Input
定义的组件参数),则应该使用
ngOnInit
,否则构造函数就足够了…

构造函数()
是一种类型脚本功能,为
新SomeClass()
调用。构造函数确保类层次结构中的字段初始化顺序正确

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


另请参见

构造函数是typescript类的预定义默认方法。角度和构造函数之间没有关系。通常我们使用
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() 
  }
}

有关更多详细信息,请参见

,但您没有回答实际问题。在这种情况下,我们应该使用哪一个..?ngOnInit并不是在构造函数调用之后才调用的,它们之间有ngOnChanges:@JugalSingh您应该使用ngOnInit进行绑定相关的工作。不建议使用构造函数,因为它会影响性能。除非迫切需要预先初始化某些东西,否则onInit很好地满足了这一目的,感觉就像是网络形式的地狱。我只是想知道,在webforms生命周期中,构造函数是在ngInit之前调用的。有没有在构造函数上使用
ngOnInit
会不好的情况?你是100%正确的,我投你一票。在我看来,如果我们把ngOnInit描述为React的componentDidMount,那么所有的困惑都会消失。但老实说,对于开发人员来说,我们只需要有一个初始化短语,不管它被调用。非常古老的方式是使用类似函数的类来构建组件类,因此注入作为参数传入,您只需要一个
$onInit
。Ng2+不是一件漂亮的艺术品。构造函数是一种有一定限制的类型脚本语言特性。没有什么能做得到。