Angular的constructor和ngOnInit裡寫程式碼有什麼區別?
參考這個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裡完成。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2736605/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Angular 2 constructor & ngOnInitAngularStructGo
- 【程式碼實驗室】.->和.有什麼區別?
- 低程式碼和零程式碼平臺,到底有什麼區別?
- 低程式碼與專業程式碼有什麼區別?
- 無程式碼和低程式碼最大的區別是什麼?
- 什麼是 TypeScript 裡的 Constructor signatureTypeScriptStruct
- Python指令碼和網頁有什麼區別?Python指令碼網頁
- Python和其他流行的程式語言有什麼區別?Python
- 什麼是企業中臺?它和低程式碼平臺有什麼區別?
- 商家收款碼和個人收款碼有什麼區別
- 程式和程式有什麼區別?Linux學習入門Linux
- 面試官:Java的重寫和過載有什麼區別?面試Java
- shim和polyfill有什麼區別
- vue和react有什麼區別?VueReact
- modbus和tcp有什麼區別?TCP
- Jsp和Servlet有什麼區別?JSServlet
- SpringBoot和Spring有什麼區別?Spring Boot
- Cache 和 Buffer 有什麼區別?
- RPA和IPA有什麼區別
- int 和 Integer 有什麼區別
- rancher 和 Kubernetes有什麼區別?
- QPS和TPS有什麼區別?
- Hifi和ONT 有什麼區別
- Iterator和ListIterator有什麼區別
- DOM和BOM有什麼區別?
- xpath和dom有什麼區別?
- Activity和Fragment有什麼區別Fragment
- HTTP和HTTPS有什麼區別?HTTP
- mongodb和mysql有什麼區別MongoDBMySql
- python和nodejs有什麼區別PythonNodeJS
- VPS和HTTP有什麼區別?HTTP
- session 和 cookie 有什麼區別?SessionCookie
- float和double有什麼區別?
- @Controller和@RestController有什麼區別?ControllerREST
- cookie和session 有什麼區別?CookieSession
- ReferenceError和TypeError有什麼區別?Error
- Linux和Unix之間有什麼關聯?區別在哪裡?Linux
- cookie是什麼?和session有什麼區別?CookieSession