小編給大家分享一下Angular之constructor和ngOnInit差異有哪些,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
創(chuàng)新互聯(lián)公司是專業(yè)的孝南網(wǎng)站建設(shè)公司,孝南接單;提供成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行孝南網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
區(qū)別
constructor是ES6引入類的概念后新出現(xiàn)的東東,是類的自身屬性,并不屬于Angular的范疇,所以Angular沒(méi)有辦法控制constructor。constructor會(huì)在類生成實(shí)例時(shí)調(diào)用:
import {Component} from '@angular/core'; @Component({ selector: 'hello-world', templateUrl: 'hello-world.html' }) class HelloWorld { constructor() { console.log('constructor被調(diào)用,但和Angular無(wú)關(guān)'); } } // 生成類實(shí)例,此時(shí)會(huì)調(diào)用constructor new HelloWorld();
既然Angular無(wú)法控制constructor,那么ngOnInit的出現(xiàn)就不足為奇了,畢竟槍把子得握在自己手里才安全。
ngOnInit的作用根據(jù)官方的說(shuō)法:
ngOnInit用于在Angular第一次顯示數(shù)據(jù)綁定和設(shè)置指令/組件的輸入屬性之后,初始化指令/組件。
ngOnInit屬于Angular生命周期的一部分,其在第一輪ngOnChanges完成之后調(diào)用,并且只調(diào)用一次:
import {Component, OnInit} from '@angular/core'; @Component({ selector: 'hello-world', templateUrl: 'hello-world.html' }) class HelloWorld implements OnInit { constructor() { } ngOnInit() { console.log('ngOnInit被Angular調(diào)用'); } }
constructor適用場(chǎng)景
即使Angular定義了ngOnInit,constructor也有其用武之地,其主要作用是注入依賴,特別是在TypeScript開(kāi)發(fā)Angular工程時(shí),經(jīng)常會(huì)遇到類似下面的代碼:
import { Component, ElementRef } from '@angular/core'; @Component({ selector: 'hello-world', templateUrl: 'hello-world.html' }) class HelloWorld { constructor(private elementRef: ElementRef) { // 在類中就可以使用this.elementRef了 } }
在constructor
中注入的依賴,就可以作為類的屬性被使用了。
ngOnInit適用場(chǎng)景
ngOnInit純粹是通知開(kāi)發(fā)者組件/指令已經(jīng)被初始化完成了,此時(shí)組件/指令上的屬性綁定操作以及輸入操作已經(jīng)完成,也就是說(shuō)在ngOnInit函數(shù)中我們已經(jīng)能夠操作組件/指令中被傳入的數(shù)據(jù)了:
// hello-world.ts import { Component, Input, OnInit } from '@angular/core'; @Component({ selector: 'hello-world', template: `Hello {{name}}!
` }) class HelloWorld implements OnInit { @Input() name: string; constructor() { // constructor中還不能獲取到組件/指令中被傳入的數(shù)據(jù) console.log(this.name); // undefined } ngOnInit() { // ngOnInit中已經(jīng)能夠獲取到組件/指令中被傳入的數(shù)據(jù) console.log(this.name); // 傳入的數(shù)據(jù) } }
所以我們可以在ngOnInit中做一些初始化操作。
看完了這篇文章,相信你對(duì)“Angular之constructor和ngOnInit差異有哪些”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!