关于angular:Angular的constructor和ngOnInit里写代码有什么区别

45次阅读

共计 1814 个字符,预计需要花费 5 分钟才能阅读完成。

参考这个 StackOverflow 探讨 Difference between Constructor and ngOnInit

得赞超过 1000 的答案:

The Constructor is a default method of the class that is executed when the class is instantiated and ensures proper initialisation of fields in the class and its subclasses. Angular, or better Dependency Injector (DI), analyses the constructor parameters and when it creates a new instance by calling new MyClass() it tries to find providers that match the types of the constructor parameters, resolves them and passes them to the constructor like

当 class 被实例化时,constructor 是默认被执行的办法,确保类和其子类都被正确地初始化。Angular 依赖注入机制,会剖析 constructor 的输出参数,当应用 new MyClass 创立 class 实例时,会试着去查找能匹配构造函数类型的 providers,解析 providers 并将后果传递到类的构造函数里。

ngOnInit is a life cycle hook called by Angular to indicate that Angular is done creating the component.

ngOnInit 是一个生命周期钩子,Angular 调用 ngOnInit 时,向应用程序传递这样一个信息:Angular 曾经实现了 Component 的创立工作。

We have to import OnInit like this in order to use it (actually implementing OnInit is not mandatory but considered good practice):

import {Component, OnInit} from '@angular/core';

ngOnInit 的应用并不是毫无代价的,得须要导入 OnInit,而后实现这个 hook:

export class App implements OnInit {constructor() {// Called first time before the ngOnInit()
  }

  ngOnInit() {// Called after the constructor and called  after the first ngOnChanges() 
  }
}

Implement this interface to execute custom initialization logic after your directive’s data-bound properties have been initialized. ngOnInit is called right after the directive’s data-bound properties have been checked for the first time, and before any of its children have been checked. It is invoked only once when the directive is instantiated.

Mostly we use ngOnInit for all the initialization/declaration and avoid stuff to work in the constructor. The constructor should only be used to initialize class members but shouldn’t do actual “work”.

So you should use constructor() to setup Dependency Injection and not much else. ngOnInit() is better place to “start” – it’s where/when components’ bindings are resolved.

最佳实际

constructor 只用于 setup 依赖注入,以及初始化类的成员。其余所有业务相干的自定义初始化逻辑,均放在 ngOnInit hook 里实现。

正文完
 0