Rumah >hujung hadapan web >tutorial js >Merangkul Tanpa Zon dalam Sudut: Era Baharu Pengesanan Perubahan
Angular 18, dikeluarkan pada 22 Mei 2024, memperkenalkan pengubah permainan eksperimen: aplikasi Sudut tanpa zon. Ini menghapuskan pergantungan Zone.js, meningkatkan prestasi, mengurangkan overhed dan memudahkan penyahpepijatan. Mari kita mendalami aplikasi tanpa zon, kelebihannya dan cara mencuba ciri ini.
Pengesanan perubahan memastikan DOM disegerakkan dengan data komponen. Sebelum ini, Angular bergantung pada Zone.js. Pengesanan perubahan dicetuskan dengan cara berikut:
setTimeout
, setInterval
, Resolusi Janji.ApplicationRef.tick()
, ChangeDetectorRef.detectChanges()
.API penyemak imbas yang ditambal Zone.js, memberitahu Angular untuk memulakan pengesanan perubahan. Walaupun berkesan, ini menambah overhed dan kadangkala menyebabkan ExpressionChangedAfterItHasBeenCheckedError
.
Sebelum pengesanan perubahan tanpa zon, Zone.js menguruskan kemas kini UI. Contoh StackBlitz ini menggambarkan:
ChangeDetectionStrategy.OnPush
, mutasi tatasusunan langsung mungkin tidak mengemas kini paparan melainkan rujukan berubah atau pengesanan perubahan dicetuskan secara manual.AsyncPipe
memudahkan pengendalian yang boleh diperhatikan, melanggan secara automatik dan mencetuskan pengesanan perubahan.Contoh ini menyerlahkan peranan Zone.js dalam pengesanan perubahan, menetapkan peringkat untuk seni bina tanpa zon Angular yang dipertingkatkan.
Mengalih keluar Zone.js menawarkan faedah yang ketara:
ExpressionChangedAfterItHasBeenCheckedError
isu dan kerumitan berkaitan zon.Bertukar kepada tanpa zon memerlukan perubahan konfigurasi:
app.config.ts
, tambah:<code class="language-typescript">providers: [ provideExperimentalZonelessChangeDetection() ]</code>
Alih keluar provideZoneChangeDetection()
jika ada.
import '*zone.js';
daripada fail aplikasi anda.angular.json
, alih keluar zone.js
daripada tatasusunan polyfills
:<code class="language-json">"polyfills": []</code>
<code class="language-bash">npm uninstall zone.js</code>
Contoh ini menunjukkan pengesanan perubahan tanpa Zone.js:
Mari kita analisa setiap senario:
Berfungsi seperti yang diharapkan.
Memerlukan this.changeDetectorRef.markForCheck();
atau menggunakan isyarat:
Versi yang diperbetulkan (dengan markForCheck
):
Versi yang diperbetulkan (dengan isyarat):
Paparan tidak dikemas kini secara automatik:
Versi yang diperbetulkan (dengan markForCheck
):
Menggunakan async
paip adalah diutamakan.
terus terang; gunakan paip async
:
Gunakan toSignal()
untuk menukar pemerhatian kepada isyarat:
Ringkasan:
markForCheck()
atau isyarat.async
.Angular 19 memperhalusi lagi sokongan aplikasi tanpa zon, menambah baik API, menambah sokongan pemaparan bahagian pelayan dan mempertingkatkan ujian. Angular CLI kini menyokong penciptaan projek tanpa zon:
<code class="language-typescript">providers: [ provideExperimentalZonelessChangeDetection() ]</code>
Atas ialah kandungan terperinci Merangkul Tanpa Zon dalam Sudut: Era Baharu Pengesanan Perubahan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!