Pembelajaran sudut bercakap tentang kitaran hayat

青灯夜游
Lepaskan: 2023-01-16 20:05:44
ke hadapan
2215 orang telah melayarinya

Artikel ini akan membantu anda terus belajar sudut Apabila menggunakan sudut untuk pembangunan, anda tidak boleh mengelakkan keperluan untuk didedahkan kepada kitaran hayat. Saya harap ia akan membantu semua orang.

Pembelajaran sudut bercakap tentang kitaran hayat

Pembaca yang telah didedahkan dengan perkembangan react dan vue harus biasa dengan konsep kitaran hayat. Kita tidak boleh mengelakkannya dalam proses pembangunan menggunakan angular.

Sesuatu komponen akan melalui beberapa siri peringkat dari awal hingga masa ia dimusnahkan. Ini ialah kitaran hayat, dan peringkat ini sepadan dengan lifecycle hooks yang disediakan oleh aplikasi.

Jadi, apakah ini angular dalam hooks? Memahami mereka adalah penting untuk tempat anda harus menulis program anda. [Cadangan tutorial berkaitan: "tutorial sudut"] Dalam

angular, susunan pelaksanaan kitaran hayat adalah seperti berikut:

- constructor 【常用,不算钩子函数,但是很重要】
- ngOnChanges【常用】
- ngOnInit【常用】
- ngDoCheck
  - ngAfterContentInit
  - ngAfterContentChecked
  - ngAfterViewInit【常用】
  - ngAfterViewChecked
- ngOnDestroy【常用】
Salin selepas log masuk

Untuk penjelasan dan pengesahan , kami menggunakan angular-cli menjana projek demo.

pembina

Apabila es6 dalam class memulakan objek, constructor akan dipanggil serta-merta. Komponen

class Person {
  constructor(name) {
    console.log('be called')
    this.name = name;
  }
}

let jimmy = new Person('jimmy'); // be called
Salin selepas log masuk

angular itu sendiri mengeksport kelas. Apabila komponen ini dinaikkan sebanyak new, ia akan mendapat nilai lalai dalam constructor.

ngOnChanges

Apabila kita mempunyai perubahan parameter luaran, kita akan melaksanakan ngOnChanges, yang bermaksud bahawa komponen mempunyai atribut terikat kepada @Input Dipanggil apabila nilai perubahan.

Ringkasnya, apabila komponen induk mengikat elemen dalam komponen anak, fungsi cangkuk ini akan dicetuskan dan ia boleh dimulakan beberapa kali. Ini sentiasa diperkenalkan dalam ngOnInit di bawah.

ngOnInit

Apabila kaedah ini dipanggil, ini bermakna komponen telah berjaya dimulakan. Dipanggil selepas ngOnChanges() pertama selesai, dan sekali sahaja.

// app.component.ts
export class AppComponent implements OnInit, OnChanges {

  constructor() {
    console.log('1. constructor')
  }

  ngOnChanges() {
    console.log('2. ngOnChanges')
  }

  ngOnInit() {
    console.log('3. ngOnInit')
  }
}
Salin selepas log masuk

Maklumat yang dicetak adalah seperti berikut:

Pembelajaran sudut bercakap tentang kitaran hayat

Hah? Mengapakah maklumat fungsi cangkuk dalam ngOnChanges tidak dicetak?

Seperti yang dinyatakan di atas, keadaan pencetus @Input perlu dicetuskan apabila nilai atribut berubah. Mari kita ubah suainya:

<!-- app.component.html -->
<div>
  <app-demo></app-demo>
</div>
Salin selepas log masuk
// app.component.ts
// AppComponent 类中添加属性
public count:number = 0;
Salin selepas log masuk
<!-- demo.component.html -->
<h3>count: {{ count }}</h3>
Salin selepas log masuk
// demo.component.ts
export class DemoComponent implements OnInit, OnChanges {

  @Input()
  public count: number;

  constructor() {
    console.log(&#39;1. demo constructor&#39;)
  }

  ngOnChanges() {
    console.log(&#39;2. demo ngOnChanges&#39;)
  }

  ngOnInit() {
    console.log(&#39;3. demo ngOnInit&#39;)
  }

}
Salin selepas log masuk

Pembelajaran sudut bercakap tentang kitaran hayat

Apabila nilai diserahkan kepada komponen anak @Input melalui demo, maka Akan pencetus demo dalam komponen ngOnChanges.

Apabila sifat yang dilalui oleh @Input berubah, fungsi cangkuk demo dalam komponen ngOnChanges boleh dicetuskan beberapa kali.

<!-- app.component.html -->
<div>
  <app-demo [count]="count"></app-demo>

  <button (click)="parentDemo()">parent button</button>
</div>
Salin selepas log masuk
// app.component.ts
parentDemo() {
  this.count++;
}
Salin selepas log masuk

Pembelajaran sudut bercakap tentang kitaran hayat

ngDoCheck

Cetuskan fungsi cangkuk ini apabila pengesanan perubahan berlaku.

Fungsi cangkuk ini dipanggil serta-merta selepas setiap pengesanan perubahan ngOnChanges dan pengesanan perubahan kali pertama dilaksanakan ngOnInit.

// demo.component.ts

ngDoCheck() {
  console.log(&#39;4. demo ngDoCheck&#39;)
}
Salin selepas log masuk

Pembelajaran sudut bercakap tentang kitaran hayat

Fungsi cangkuk ini dipanggil lebih kerap dan lebih mahal untuk digunakan, jadi gunakannya dengan berhati-hati.

Secara amnya gunakan ngOnChanges untuk mengesan perubahan dan bukannya ngDoCheck

ngAfterContentInit

Apabila menayangkan kandungan luaran kepada komponen dalaman , panggil ngDoCheck selepas panggilan pertama, dan hanya memanggilnya sekali. ngAfterContentInit

// demo.component.ts

ngAfterContentInit() {
  console.log(&#39;5. demo ngAfterContentInit&#39;);
}
Salin selepas log masuk

Pembelajaran sudut bercakap tentang kitaran hayat

ngAfterContentChecked

Fungsi cangkuk dipanggil selepas setiap ngAfterContentChecked.ngDoCheck

// demo.component.ts

ngAfterContentChecked() {
  console.log(&#39;5. demo ngAfterContentChecked&#39;);
}
Salin selepas log masuk

Pembelajaran sudut bercakap tentang kitaran hayat

ngAfterViewInit

Panggil fungsi cangkuk ini selepas permulaan paparan selesai. Dipanggil selepas

pertama, sekali sahaja. ngAfterContentChecked

Pada masa ini, adalah lebih munasabah untuk mendapatkan

nod halamanDOM

// demo.compoent.ts

ngAfterViewInit() {
  console.log(&#39;7. demo ngAfterViewInit&#39;);
}
Salin selepas log masuk

Pembelajaran sudut bercakap tentang kitaran hayat

ngAfterViewChecked

视图检测完成调用。在 ngAfterViewinit 后调用,和在每次 ngAfterContentChecked 之后调用,也就是在每次 ngDoCheck 之后调用。

// demo.component.ts

ngAfterViewChecked() {
  console.log(&#39;8. ngAfterViewChecked&#39;)
}
Salin selepas log masuk

Pembelajaran sudut bercakap tentang kitaran hayat

ngOnDestroy

组件被销毁时候进行的操作。

在这个钩子函数中,我们可以取消订阅,取消定时操作等等。

<!-- app.component.html -->
<app-demo [count]="count" *ngIf="showDemoComponent"></app-demo>

<button (click)="hideDemo()">hide demo component</button>
Salin selepas log masuk
// app.component.ts
public showDemoComponent: boolean = true;

hideDemo() {
  this.showDemoComponent = false
}
Salin selepas log masuk
// demo.component.ts
ngOnDestroy() {
  console.log(&#39;9. demo ngOnDestroy&#39;)
}
Salin selepas log masuk

Pembelajaran sudut bercakap tentang kitaran hayat

PS: 不知道读者有没有发现,调用一次的钩子函数都比较常用~

更多编程相关知识,请访问:编程入门!!

Atas ialah kandungan terperinci Pembelajaran sudut bercakap tentang kitaran hayat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan