国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[Angular 基礎(chǔ)] - 生命周期函數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了[Angular 基礎(chǔ)] - 生命周期函數(shù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

[Angular 基礎(chǔ)] - 生命周期函數(shù)


之前的筆記:

  • [Angular 基礎(chǔ)] - Angular 渲染過程 & 組件的創(chuàng)建

  • [Angular 基礎(chǔ)] - 數(shù)據(jù)綁定(databinding)

  • [Angular 基礎(chǔ)] - 指令(directives)

    以上為靜態(tài)頁面,即不涉及到跨組件交流的內(nèi)容

    以下涉及到組件內(nèi)的溝通,從這開始數(shù)據(jù)就“活”了

  • [Angular 基礎(chǔ)] - 自定義事件 & 自定義屬性

  • [Angular 基礎(chǔ)] - 視圖封裝 & 局部引用 & 父子組件中內(nèi)容傳遞


看了一下,從 v2 開始的生命周期好像就沒變過,這是從 archive 的 v2 官網(wǎng)上拉下來的一張圖:

[Angular 基礎(chǔ)] - 生命周期函數(shù),# Angular,angular.js,javascript,前端

數(shù)量和順序都是一樣的,藍(lán)色部分則是與 投射(projection) 有關(guān)

這篇筆記相對(duì)而言比較枯燥是真的……也沒辦法……

constructor

雖然說生命周期函數(shù)里沒有明確的包含構(gòu)造函數(shù),這里還是提一下

構(gòu)造函數(shù)是最先運(yùn)行的,同時(shí)這里的操作 應(yīng)該 省時(shí)省力,不應(yīng)該 觸發(fā)任何的副作用,它唯一的作用就是對(duì)變量賦初始值

ngOnChanges

這是第一個(gè)調(diào)動(dòng)的生命周期,也是調(diào)動(dòng)最頻繁的生命周期函數(shù),組件中的變化都會(huì)觸發(fā)這個(gè)函數(shù)的調(diào)用

官方文檔中提到,如果當(dāng)前組件內(nèi)沒有任何 @Input 的話,那么 ngOnChanges 就不會(huì)被調(diào)用。同樣,因?yàn)橥粋€(gè)組件內(nèi)只能存在一個(gè) ngOnChanges,因此它的功能有點(diǎn)像 useEffect 的依賴數(shù)組中加上了所有的變量,或者對(duì)應(yīng)的 class based component 中的 componentDidUpdate

實(shí)現(xiàn)如下:

export class ServerElementComponent {
  @Input('element') aliasElement: ServerElement;

  ngOnChanges(changes: SimpleChanges) {
    console.log('ngOnChanges in ServerElementComponent');
    console.log(changes);
  }
}

SimpleChanges 也是從 @angular/core 中導(dǎo)出的,數(shù)據(jù)結(jié)構(gòu)如下:

class SimpleChange {
  constructor(previousValue: any, currentValue: any, firstChange: boolean);
  previousValue: any;
  currentValue: any;
  firstChange: boolean;
  isFirstChange(): boolean;
}

頁面輸出如下:

[Angular 基礎(chǔ)] - 生命周期函數(shù),# Angular,angular.js,javascript,前端

同樣的代碼我在 cockpitserver-element 都有輸出,但是 cockpit 沒有 @Input,因此 ngOnChanges 就沒有觸發(fā)

這就是上面中提到的,

當(dāng)前組件內(nèi)沒有任何 @Input 的話,那么 ngOnChanges 就不會(huì)被調(diào)用

換言之,ngOnChanges 是針對(duì) @Input 的變化而被調(diào)動(dòng)的

??:ref 不會(huì)引起 ngOnChanges 的調(diào)用,并且,如果被 @Input 綁定的對(duì)象的 reference 沒有變化,也是不會(huì)引起 ngOnChanges 的調(diào)用

??:如果優(yōu)化做的比較好的話,ngOnChanges 能夠有效的提升性能

ngOnInit

ngOnInit 會(huì)在 ngOnChanges 第一次后調(diào)用,如果 ngOnChanges 沒有被觸發(fā),那么 ngOnInit 就是第一個(gè)調(diào)用生命周期函數(shù)。這個(gè)函數(shù)也類似于 componentDidMount,也就是 useEffect 中為空數(shù)組的實(shí)現(xiàn),同理可證,這也是一個(gè)適合觸發(fā)一個(gè)副作用的地方

具體實(shí)現(xiàn)如下:

  ngOnInit() {
    console.log('ngOnInit in CockpitComponent');
  }

效果如下:

[Angular 基礎(chǔ)] - 生命周期函數(shù),# Angular,angular.js,javascript,前端

ngDoCheck

ngDoCheck 會(huì)在 ngOnChangesngOnInit 運(yùn)行后運(yùn)行,不過對(duì)比 ngOnChanges 沒有 @Input 就不會(huì)運(yùn)行的情況,ngDoCheck 只要有變化,就會(huì)運(yùn)行,這個(gè)變化包括 @Input、對(duì)象等

這也是一個(gè)類似于 componentDidUpdate 的生命周期函數(shù)

因?yàn)?ngDoCheck 會(huì)在每一次變化被感知后運(yùn)行,所以這里也是和添加自定義的變化感知,如:

export class MyComponent implements DoCheck {
  @Input() items: any[];

  private oldItems: any[];

  ngDoCheck() {
    if (
      this.items &&
      this.oldItems &&
      this.items.length !== this.oldItems.length
    ) {
      console.log('Items array has changed');
    }
    this.oldItems = [...this.items];
  }
}

這樣的實(shí)現(xiàn)比起直接將數(shù)據(jù)綁定到 @Input() 的優(yōu)點(diǎn)就在于獲取了 previous snapshot 的值,也就類似于 componentDidUpdate(prevProps, prevState, snapshot) 這里面的參數(shù)

但是如果 change 是和 @Input 進(jìn)行綁定的,目前則是可以用 SimpleChanges 中的 firstChange + previousValue + currentValue 去解決,這樣更加的方便快捷

幾個(gè)使用 ngDoCheck 而不是 ngOnChanges 的場景:

  • 檢查更加復(fù)雜的對(duì)象,這一塊之后學(xué)習(xí)到 KeyValueDiffers 再繼續(xù)補(bǔ)全

  • 事件觸發(fā),但是沒有值的變化,如鼠標(biāo)點(diǎn)擊事件、鍵盤事件、冒泡事件等

  • 異步的情況,如 subscribe 發(fā)生后的情況,這一部分也會(huì)在學(xué)到了異步操作后補(bǔ)全

    本質(zhì)上來說這也是一個(gè)事件觸發(fā)

ngAfterContentInit

這個(gè)生命周期的調(diào)用是在 ngOnInit 后,ngDoCheck 后調(diào)用,并且只會(huì)被調(diào)用一次

說到 ngAfterContentInitngOnInit 的區(qū)別就需要簡單的談一下 Angular 的創(chuàng)造順序:

  • 父組件先被創(chuàng)建

  • 子組件隨后被創(chuàng)建

  • 調(diào)用生命周期函數(shù)

    ngOnInit 在這個(gè)地方被調(diào)用

  • 投射內(nèi)容

    ngAfterContentInit 在這里被調(diào)用

    這時(shí)候如果使用 ng-content 進(jìn)行內(nèi)容的投射,在內(nèi)容透射完畢后,ngAfterContentInit 就會(huì)被調(diào)用以表示當(dāng)前組件已經(jīng)準(zhǔn)備好了,可以完整的被渲染了

    ng-content 部分的內(nèi)容回顧在這里:[Angular 基礎(chǔ)] - 視圖封裝 & 局部引用 & 父子組件中內(nèi)容傳遞

  • View 層完成初始化

    這里就是 ngAfterViewChecked 調(diào)用的地方

從順序和結(jié)構(gòu)上來說:

  • ngOnInit 適合初始化本組件需要的內(nèi)容
  • ngAfterContentInit 適合初始化對(duì) 投射內(nèi)容 具有依賴性的內(nèi)容

這里同樣可以查看一下生命周期調(diào)用時(shí)的輸出結(jié)果,用的是前篇筆記的內(nèi)容,不過只留下了 server-component 中的 ngOnInitngAfterContentInit

[Angular 基礎(chǔ)] - 生命周期函數(shù),# Angular,angular.js,javascript,前端

可以看到,在 ngOnInit 調(diào)用的時(shí)候,@ContentChild('contentParagraph', { static: true }) paragraph: ElementRef; 這個(gè)內(nèi)容是還沒有投射的,因此輸出 this.paragraph.nativeElement.textContent 就是一個(gè)空的字符串

ngAfterContentInit 運(yùn)行時(shí),也就是投射的內(nèi)容已經(jīng)初始化后,Angular 就可以獲得 this.paragraph.nativeElement.textContent 中的內(nèi)容了

ngAfterContentChecked

這個(gè)生命周期函數(shù)會(huì)在每次 Angular 檢查投射的內(nèi)容時(shí)被調(diào)用,基本上是跟著 ngDoCheck 被調(diào)用的

ngAfterViewInit

這個(gè)生命周期函數(shù)檢查的就是 V 層(包括父子組件)是否都被初始化了

這個(gè)函數(shù)也是讓當(dāng)前 VM 層可以訪問其他 V 層

ngAfterViewChecked

同理,這個(gè)生命周期函數(shù)檢查的就是 V 層(包括父子組件)是否都被 check 了

ngOnDestroy

這里就是一個(gè)清理副作用的地方,在運(yùn)行這個(gè)函數(shù)后,當(dāng)前的 Angular 組件就會(huì)被毀滅了文章來源地址http://www.zghlxwxcb.cn/news/detail-828160.html

到了這里,關(guān)于[Angular 基礎(chǔ)] - 生命周期函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Angular組件生命周期詳解

    Angular組件生命周期詳解

    當(dāng) Angular 實(shí)例化組件類 并渲染組件視圖及其子視圖時(shí),組件實(shí)例的生命周期就開始了。生命周期一直伴隨著變更檢測,Angular 會(huì)檢查數(shù)據(jù)綁定屬性何時(shí)發(fā)生變化,并按需更新視圖和組件實(shí)例。當(dāng) Angular 銷毀組件實(shí)例并從 DOM 中移除它渲染的模板時(shí),生命周期就結(jié)束了。當(dāng) Ang

    2024年02月05日
    瀏覽(23)
  • react17:生命周期函數(shù)

    react17:生命周期函數(shù)

    掛載時(shí) 更新時(shí) setState觸發(fā)更新、父組件重新渲染時(shí)觸發(fā)更新 forceUpdate觸發(fā)更新 卸載時(shí) react(v17.0.2)的生命周期圖譜如下。? 相較于16版本,17版本生命周期函數(shù)有如下變化: componentWillMount() componentWillUpdate() componentWillReceiveProps() +getDerivedStateFromProps(props,state) +getSnapshotBeforeUp

    2024年02月11日
    瀏覽(46)
  • Vue生命周期函數(shù)(詳解)

    Vue生命周期函數(shù)(詳解)

    目錄 ?生命周期圖 生命周期函數(shù) beforeCreate和created的區(qū)別 beforeCreate創(chuàng)建前應(yīng)用場景 ?created創(chuàng)建后應(yīng)用場景 beforeMount和mounted的區(qū)別 ?beforeMount掛載前應(yīng)用場景 ?mounted掛載后應(yīng)用場景 ?beforeUpdate和updated的區(qū)別 ?beforeUpdate更新前應(yīng)用場景 ?updated更新后應(yīng)用場景 ?beforeDestroy和des

    2024年02月13日
    瀏覽(24)
  • Angular 學(xué)習(xí)日記 - 7 - 生命周期

    Angular 學(xué)習(xí)日記 - 7 - 生命周期

    ?建議在實(shí)現(xiàn)Angular? 生命周期(LifeCycle Hooks) 時(shí),可以寫在類實(shí)現(xiàn)的后面,既可以方便他人知曉用了哪些生命周期方法,又可以用vscode自動(dòng)補(bǔ)全來生成該方法,還可以防止拼錯(cuò)方法名 (指我自己) 。 1、ngOnInit() 在構(gòu)造函數(shù)觸發(fā)后觸發(fā) ? 2、ngOnChanges() 觸發(fā)時(shí)會(huì)自動(dòng)傳入一個(gè)

    2024年02月04日
    瀏覽(16)
  • 生命周期函數(shù)和wxs腳本

    生命周期函數(shù)和wxs腳本

    應(yīng)用的生命周期函數(shù):指小程序從啟動(dòng) - 運(yùn)行 - 銷毀期間依次調(diào)用的那些函數(shù)。 小程序的應(yīng)用生命周期函數(shù)需要在 app.js 中進(jìn)行聲明。 上面這張圖就是從前臺(tái)進(jìn)入了后臺(tái)。后臺(tái)進(jìn)入前臺(tái)反之同理。 頁面的生命周期函數(shù):指小程序中,每個(gè)頁面從加載 - 渲染 - 銷毀期間依次調(diào)

    2024年02月16日
    瀏覽(31)
  • 【Unity函數(shù)執(zhí)行順序(Unity腳本生命周期函數(shù))】

    【Unity函數(shù)執(zhí)行順序(Unity腳本生命周期函數(shù))】

    溫故而知新,下面我將介紹Unity入門需要了解的常用生命周期函數(shù) 生命周期函數(shù)就是該腳本對(duì)象依附的GameObject對(duì)象從出生到消亡整個(gè)生命周期中 會(huì)通過反射自動(dòng)調(diào)用的一些特殊函數(shù)。 下面是對(duì)各個(gè)函數(shù)解鎖 a.調(diào)用情況: 1.在加載場景時(shí)初始化包含腳本激活狀態(tài)的GameObject時(shí)。

    2023年04月23日
    瀏覽(33)
  • Angular系列教程之生命周期鉤子

    Angular系列教程之生命周期鉤子

    Angular是一種流行的前端開發(fā)框架,它提供了許多功能強(qiáng)大且易于使用的工具和特性。其中之一就是生命周期鉤子(Lifecycle Hooks),它們?cè)试S我們?cè)诮M件的不同生命周期階段執(zhí)行自定義代碼。本文將介紹Angular的生命周期鉤子以及如何使用它們。 生命周期鉤子是一些用于在組件

    2024年01月17日
    瀏覽(41)
  • 【react】react生命周期鉤子函數(shù):

    【react】react生命周期鉤子函數(shù):

    一、生命周期概念: 生命周期:簡單來說就是一個(gè)事物從出生到消亡的過程就是生命周期,在React中的生命周期,就是組件從創(chuàng)建、掛載到頁面再到卸載組件的過程。 意義:生命周期有助于理解組件運(yùn)行方式、完成復(fù)雜組件功能、分析組件中間問題產(chǎn)生的原因等。 生命周期鉤子函數(shù)

    2024年02月14日
    瀏覽(25)
  • vue3-生命周期鉤子函數(shù)

    聲明周期函數(shù)onMounted ,onUnmounted,onUpdated onMounted:頁面渲染之前執(zhí)行,執(zhí)行完,頁面就出來了 onUnmounted:組件注銷之前執(zhí)行,執(zhí)行完組件就不在頁面顯示了。如果隱藏組件就行執(zhí)行。 onUpdated:當(dāng)組件內(nèi)的內(nèi)容發(fā)生變化時(shí),就會(huì)執(zhí)行這個(gè)更新鉤子函數(shù),比如刪除數(shù)組中的某個(gè)元素

    2024年02月11日
    瀏覽(32)
  • Unity 關(guān)于生命周期函數(shù)的一些認(rèn)識(shí)

    Unity 關(guān)于生命周期函數(shù)的一些認(rèn)識(shí)

    Unity 生命周期函數(shù)主要有以下一些: Awake() : 在腳本被加載時(shí)調(diào)用。用于初始化對(duì)象的狀態(tài)和引用。 OnEnable() : 在腳本組件被啟用時(shí)調(diào)用。在腳本組件被激活時(shí)執(zhí)行一次,以及在腳本組件被重新激活時(shí)執(zhí)行。 Reset() : 在腳本組件被重置時(shí)調(diào)用。用于重置腳本的初始狀態(tài)。 Start

    2024年01月21日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包