Sudut 9, apa yang baru?


Sampai Stephen Fluin secara tradisional merilis rilis baru dan artikel tentang fitur-fitur Angular baru, saya mencoba untuk menumpuk semuanya bersama dan menjawab pertanyaan tentang apa yang baru?


Salah satu fitur paling keren yang telah kami tunggu hampir 2 tahun adalah Angular Ivy, dan akhirnya Angular 9 akan dikompilasi dengan Ivy secara default. Jika Anda ingin menyelam ke bagian dalam Angular Ivy ada 2 video dari AngularConnect: tentang Compiler dan Runtime .


Seperti biasa dengan CLI Angular, Anda dapat memutakhirkan dengan cukup mudah, panduan terperinci .


Pengecekan tipe template


Bendera strictTemplates akan ditambahkan sebagai tambahan pada fullTemplateTypeCheck, itu hanya akan berfungsi di Ivy. Dalam mode penuh adalah:


  • memeriksa pengikatan komponen dan arahan ke @Input


  • saat memeriksa, typescript strictNullChecks akan diperiksa


  • memeriksa jenis komponen dan arahan, termasuk generik


  • memeriksa templat dalam konteks eksekusi, misalnya, di dalam * ngFor


  • memeriksa jenis acara $ acara dalam komponen dan arahan, juga saat menjiwai


  • memeriksa jenis yang benar untuk referensi lokal elemen DOM, misalnya, ketika document.createElement akan mengembalikan tag



Memiliki templat check in tipe ketat seperti itu, kadang-kadang perlu untuk menonaktifkan cek ini, jadi kami menghasilkan $ any () di mana cek tidak akan dilakukan.


Contoh: {{$ any (person) .addresss.street}}


@ContentChildren


ContentChild Secara default hanya akan bekerja dengan anak-anak langsung


 <comp> <div #bar> <!-- new runtime --> <div #foo></div> <!-- matches in old runtime --> </div> </comp> 

Untuk melakukan ini, Anda harus memotong turunan bendera


@ ContentChildren ('foo', { descendants : false}) foo : QueryList < ElementRef >


DI


Semua kelas yang menggunakan DI Angular harus memiliki dekorator Angular, seperti @Directive() atau @Injectable (kelas yang sebelumnya tidak didekorasi hanya diperbolehkan dalam mode AOT atau jika digunakan melalui Inject). Secara default, CLI harus memutakhirkannya dengan benar.


Kepada:


 export class MyService {...} export class MyOtherService {...} export class MyThirdClass {...} export class MyFourthClass {...} export class MyFifthClass {...} @NgModule({ providers: [ MyService, {provide: SOME_TOKEN, useClass: MyOtherService}, 

Setelah:


 @Injectable() export class MyService {...} @Injectable() export class MyOtherService {...} export class MyThirdClass {...} export class MyFourthClass {...} export class MySixthClass {...} 

Kepada:


 {provide: MyToken} 

Setelah:


 {provide: MyToken, useValue: undefined} 

Masukan


Input untuk arahan (misalnya, nama dalam <my-comp name = "">) ​​sekarang ditetapkan saat membuat tampilan sebelum mengubah deteksi (sebelumnya mereka semua diatur selama deteksi perubahan).


Beberapa lebih menarik


Properti seperti host di dalam @Component dan @Directive dapat diwarisi (sebelumnya hanya properti dengan bidang eksplisit seperti @HostBinding yang diwarisi).


Dukungan HammerJS disediakan melalui impor HammerModule (sebelumnya selalu disertakan dalam paket kerja terlepas dari apakah aplikasi yang digunakan HammerJS).


Jika token diinjeksi dengan @Self atau @Self , maka injektor modul tidak mencari token ini (sebelumnya, token yang ditandai dengan flag ini masih akan dicari di level modul).


Saat mengakses beberapa tautan lokal di templat dengan nama yang sama, yang pertama diambil (contoh terakhir diambil sebelumnya).


Arahan yang digunakan dalam modul yang diekspor (tetapi tidak diekspor sendiri) diekspor secara publik (sebelumnya, kompiler secara otomatis mencatat ekspor pribadi dengan alias sehingga dapat menggunakan pengetahuan globalnya untuk menyelesaikan konflik)


Fungsi eksternal atau konstanta eksternal dalam metadata dekorator tidak dapat diatasi secara statis (sebelumnya Anda dapat mengimpor konstanta atau fungsi dari modul terkompilasi lain, misalnya, dari perpustakaan, dan menggunakan konstanta / fungsi ini dalam definisi @NgModule Anda).


Referensi input langsung dalam arahan yang dapat diakses melalui tautan lokal tidak lagi didukung secara default.


Jika ada atribut kelas yang tidak terkait dan mengikat melalui [kelas], kelas atribut yang tidak terkait juga akan ditambahkan (sebelumnya, pengikatan melalui kelas menulis ulang kelas dalam atribut tidak terikat).


Tidak mungkin lagi menimpa kait siklus hidup dengan mengejek contoh arahan untuk pengujian (untuk melakukan ini, ubah kait siklus hidup pada arahan itu sendiri).


Token injeksi khusus (seperti TemplateRef atau ViewContainerRef) mengembalikan instance baru setiap kali diminta (sebelumnya, instans digeledah jika diminta dari node yang sama). Ini terutama mempengaruhi tes yang membandingkan identitas objek-objek ini.


Penguraian ICU terjadi pada waktu berjalan, jadi hanya teks, tag HTML, dan pengikat teks yang diizinkan (arahan sebelumnya juga diizinkan di dalam ekspresi ICU).


Usang


Perubahan signifikan pada API disajikan di sini, dan apa yang sudah tidak digunakan lagi akan dihapus.



Penghapusan API yang sudah tidak digunakan lagi



Dan jika ini tidak cukup, maka ada sedikit lagi .


Yah, kami berharap rilis Angular 9 setelah liburan Natal =):


FYI, saya membuat keputusan untuk menahan rilis #Angular 9.0 hingga tahun depan sehingga kita semua dan Anda dapat mengambil cuti selama beberapa minggu mendatang. Selamat Liburan & sampai jumpa di 2020!


Dan tentu saja, berlangganan saluran di telegram @ngFanatic di mana berita lebih lanjut tentang Angular akan diterbitkan.

Source: https://habr.com/ru/post/id481100/


All Articles