国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

淺談angular4生命周期鉤子

2019-11-19 15:32:56
字體:
來源:轉載
供稿:網友

理解

Angular提供了生命周期鉤子,把這些關鍵生命時刻暴露出來,賦予我們在它們發生時采取行動的能力??梢詫^子函數理解為在合適的時候做合適的事情。

鉤子函數

ng4主要提供了8個鉤子函數:

1、ngOnchanges

@input屬性(輸入屬性)發生變化時,會調用。非此屬性,不會調用。

當輸入屬性為對象時,當對象的屬性值發生變化時,不會調用,當對象的引用變化時會觸發。

先于ngOnInit調用。

2、ngOnInit

只執行一次,dom操作可放在其中。(最常用)

3、NgDocheck

每次發生變更檢測時會被調用

ngDoCheck() 是Angular中的變更檢測機制.它由 zone.js 來實現的.其行為是只要你的Angular中的某個組件發生異步事件.就會檢查整個組件樹,以保證組件屬性的變化或頁面的變化是同步的.所以 ngDoCheck() 的觸發相當頻繁的.并且是我們無法預料到的.也許我們在頁面上的一個無意識操作,就會觸發幾個甚至幾十個的 ngDoCheck() 生命周期鉤子.

4、ngAfterContentInit

在組件內容初始化之后調用

5、ngAfterContentChecked

內容投影:父組件寫在子標簽之間的內容會被渲染到子模板的ng-content中去,類似vue的slot

組件及子組件每次檢查內容時調用

當父子組件都有該鉤子時,父組件先執行。

6、ngAfterViewInt

組件相應的視圖初始化之后調用

7、ngAfterViewChecked

組件及子組件每次檢查視圖時調用

當父子組件都有該鉤子時,子組件先執行。

ngAfterViewChecked與ngAfterViewInt中不允許修改綁定的屬性(@input屬性),否則拋出異常

8、ngOnDestory

銷毀,事件解綁。

3.執行順序

父組件:

組件模板

<div class="panel-body"> <input type="text" [(ngModel)]="name"> {{name}}  <son [name]="name"></son></div>

組件

@Component({ selector: 'father', templateUrl: './father.component.html', styleUrls: ['./father.component.scss']})export class FatherComponent implements OnInit { public name:string; constructor() { } ngOnInit() { console.log("父組件ngOninit"); } ngOnchanges(){ console.log("父組件ngonchanges"); } ngDoCheck (){ console.log("父組件ngDocheck") } ngAfterContentInit(){ console.log("父組件ngAfterContentInit") } ngAfterContentChecked(){ console.log("父組件ngAfterContentChecked") } ngAfterViewInit(){ console.log("父組件ngAfterViewInit") } ngAfterViewChecked(){ console.log("父組件ngAfterViewChecked") }}

子組件

@Component({ selector: 'son', templateUrl: './son.component.html', styleUrls: ['./son.component.scss']})export class SonComponent implements OnInit { @Input() name:string; constructor() { } ngOnInit() { console.log("子組件ngOninit"); } ngOnChanges (){ console.log("子組件ngonchanges"); } ngDoCheck (){ console.log("子組件ngDocheck") } ngAfterContentInit(){ console.log("子組件ngAfterContentInit") } ngAfterContentChecked(){ console.log("子組件ngAfterContentChecked") } ngAfterViewInit(){ console.log("子組件ngAfterViewInit") } ngAfterViewChecked(){ console.log("子組件ngAfterViewChecked") } }

看打印結果:

當在父組件的input中輸入內容時,會打印如下結果:

看到有人說只有當使用內容投影時才會調用ngAfterConentChecked,當上面的里面的代碼很顯然是沒用ng-content的,不知道該怎么解釋這個ngAfterConentChecked。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洛阳市| 博乐市| 洛阳市| 合作市| 博客| 湖北省| 星座| 松江区| 舟山市| 江永县| 广饶县| 固镇县| 营口市| 乌鲁木齐市| 东辽县| 大同市| 三明市| 沭阳县| 商都县| 肇庆市| 馆陶县| 来安县| 明溪县| 开封市| 丽江市| 屏东县| 深州市| 碌曲县| 沂水县| 醴陵市| 平邑县| 葵青区| 新干县| 金沙县| 永春县| 双鸭山市| 开封市| 长武县| 龙江县| 朝阳市| 土默特右旗|