@Component
Decorator1.1 Tujuan @Component
Decorator
Saat mendeklarasikan sebuah komponen, dekorator @Component harus digunakan pada kelas komponen untuk memberi tahu Angular bahwa ini adalah sebuah komponen. [Rekomendasi tutorial terkait: "tutorial sudut"]
import { Component, OnInit } from '@angular/core'; @Komponen({ pemilih: 'peringatan-produk-aplikasi', templateUrl: './product-alerts.component.html', styleUrls: ['./product-alerts.component.css'] }) kelas ekspor ProductAlertsComponent mengimplementasikan OnInit { konstruktor() {} } ngOnInit() { } }
1.2 Opsi umum dekorator @Component
@Component
dekorator mewarisi dari Directive
. Pemilih css ini digunakan untuk menandai direktif dalam templat dan memicu pembuatan instance direktif.
1.2.1继承自@Directive装饰器的选项
jenis | deskripsi | stringpemilih deskripsi |
---|---|---|
nama | pemilihcss | , digunakan untuk menandai arahan (komponen) dalam templat dan memicu |
input | instance-nyastring[] | Angular akan secara otomatis selama deteksi perubahan Perbarui properti input. Atribut inputs mendefinisikan sekumpulan item konfigurasi yang menunjuk dari directiveProperty ke bindingProperty: · directiveProperty digunakan untuk menentukan properti dalam direktif dimana nilai akan ditulis. · bindingProperty digunakan untuk menentukan properti DOM yang nilainya akan dibaca. Jika bindingProperty tidak disediakan, maka diasumsikan sama dengan directiveProperty. |
outputs | string[] | Satu set properti output untuk pengikatan acara. Ketika properti keluaran memunculkan suatu peristiwa, suatu pengendali dalam templat yang melekat pada peristiwa tersebut dipanggil. Setiap properti keluaran memetakan directiveProperty ke bindingProperty: · directiveProperty menentukan properti komponen untuk memancarkan acara. · bindingProperty menentukan atribut HTML dimana event handler akan dilampirkan. |
menyediakan | Penyedia[] | Kumpulan penyedia layanan |
ekspor Sebagai | string | Satu atau lebih nama yang dapat digunakan untuk menetapkan direktif ini ke variabel dalam templat. Jika ada beberapa nama, pisahkan dengan koma. |
queries | {[key:string]:any} | mengonfigurasi beberapa kueri yang akan dimasukkan ke dalam arahan ini. Kueri konten disetel sebelum memanggil panggilan balik ngAfterContentInit. Kueri tampilan akan disetel sebelum memanggil panggilan balik ngAfterViewInit. |
jit | true | Jika benar, instruksi/komponen akan diabaikan oleh kompiler AOT, sehingga akan selalu dikompilasi JIT. Opsi ini untuk mendukung kompiler Ivy di masa depan dan belum berpengaruh. |
host | {[key:string]:string} | menggunakan sekumpulan pasangan nilai kunci untuk memetakan properti kelas ke pengikatan elemen host (Properti, Atribut, dan peristiwa). Angular secara otomatis memeriksa pengikatan Properti host selama deteksi perubahan. Jika nilai terikat berubah, Angular memperbarui elemen host direktif. Jika kuncinya adalah Properti dari elemen host, nilai Properti akan disebarkan ke atribut DOM yang ditentukan. Ketika kuncinya adalah Atribut statis di DOM, nilai Atribut akan disebarkan ke Properti yang ditentukan pada elemen host. Untuk penanganan acara: · Kuncinya adalah event DOM yang ingin didengarkan oleh instruksi. Untuk mendengarkan acara global, tambahkan target yang ingin Anda dengarkan di depan nama acara. Targetnya bisa berupa jendela, dokumen, atau isi. · Nilainya adalah pernyataan yang akan dieksekusi ketika peristiwa terjadi. Jika pernyataan ini menghasilkan nilai salah, fungsi preventDefault dari kejadian DOM ini akan dipanggil. Variabel lokal $event dapat direferensikan dalam pernyataan ini untuk mendapatkan data peristiwa. |
1.2.2 @Component自己特有的选项
Deskripsi | jenis | opsi | |
---|---|---|---|
changeDetection | ChangeDetectionStrategy | Saat komponen dipakai, Angular akan membuat pendeteksi perubahan, yang bertanggung jawab untuk menyebarkan perubahan di setiap nilai pengikatan komponen. Kebijakan tersebut adalah salah satu dari nilai-nilai berikut: · ChangeDetectionStrategy#OnPush(0) menetapkan strategi ke CheckOnce (sesuai permintaan). · ChangeDetectionStrategy#Default(1) menetapkan strategi ke CheckAlways. | |
viewProviders | Provider[] | mendefinisikan sekumpulan objek yang dapat diinjeksi yang tersedia di setiap node anak tampilan. | |
string | moduleId | berisi ID modul yang berisi komponen. Komponen harus mampu menyelesaikan URL relatif yang digunakan dalam templat dan stylesheet. SystemJS mengekspor variabel __moduleName di setiap modul. Di CommonJS, ini dapat diatur ke module.id. | |
templateUrl | stringURL | file template komponen. Jika disediakan, jangan gunakan templat untuk menyediakan templat sebaris. | |
Templat sebaris dari | komponenstring | templat | .Jika disediakan, jangan gunakan templateUrl untuk menyediakan template. |
styleUrls | string[] | Satu atau lebih URL, menunjuk ke file yang berisi style sheet CSS dari komponen ini. | |
gaya | string[] | Satu atau lebih gaya CSS sebaris yang digunakan oleh komponen ini. | |
animations | any[] | Satu atau lebih panggilan animation trigger(), berisi beberapa definisi state() dan transisi(). | |
enkapsulasi | ViewEncapsulation | adalah strategi enkapsulasi gaya yang digunakan oleh templat dan gaya CSS. Nilai-nilainya adalah: · ViewEncapsulation.ShadowDom: Gunakan Shadow DOM. Ini hanya berfungsi pada platform yang secara asli mendukung Shadow DOM. · ViewEncapsulation.Emulated: Gunakan shimmed CSS untuk meniru perilaku asli. · ViewEncapsulation.None: Gunakan CSS global tanpa enkapsulasi apa pun. Jika tidak disediakan, nilai diperoleh dari CompilerOptions. Opsi kompiler default adalah ViewEncapsulation.Emulated. Jika kebijakan disetel ke ViewEncapsulation.Emulated dan komponen tidak menentukan gaya atau styleUrls, maka secara otomatis akan beralih ke ViewEncapsulation.None. | |
interpolasi | [string, string] | mengesampingkan pembatas awal dan akhir default dari ekspresi interpolasi ({ { dan }}) | |
entryComponents | Array<Type | any[]> | |
melestarikanWhitespaces | boolean | Jika benar, maka dipertahankan, jika salah, kemungkinan karakter spasi tambahan akan dihapus dari templat yang dikompilasi. Karakter spasi adalah karakter yang cocok dengan s dalam ekspresi reguler JavaScript. Defaultnya adalah false kecuali diganti melalui opsi kompiler. |
selector
dapat menggunakan salah satu bentuk berikut:
element-name
: pilih[attribute]
berdasarkan nama elemen: pilih.class
berdasarkan nama atribut: pilih [atribut=nilai] berdasarkan nama kelasnot(sub_selector)
: pilih selector1, selector2 hanya jika elemen tidak cocok dengan sub-selector sub_selectorselector1, selector2
2.1 dipilih apakah selector1 atau selector2 cocok dengan element-name
: select
@Component({ pemilih: 'elemen aplikasi', templat: './element.component.html', styleUrls: ['./element.component.css'] })
<app-element></app-element>
2.2 [attribute]
: Pilih
@Component({ pemilih: '[elemen aplikasi]', templat: './element.component.html', styleUrls: ['./element.component.css'] })
<div app-element></div>
2.3 .class
: Pilih
@Component({ pemilih: '.app-element', templat: './element.component.html', styleUrls: ['./element.component.css'] })
<div class="app-element"></div>
host
: {[key:string]:string}
menggunakan sekumpulan pasangan nilai kunci untuk memetakan properti kelas ke pengikatan host elemen (Properti, Atribut, dan acara).
Angular secara otomatis memeriksa pengikatan Properti host selama deteksi perubahan. Jika nilai terikat berubah, Angular memperbarui elemen host direktif.
untuk pemrosesan peristiwa:
3.1 attribute
dan property
Persamaan dan perbedaan:
双向
dom 的property
, jadi instruksinya terikat pada properti, tetapi dalam beberapa kasus dom tidak ada. Properti seperti colspan, rowpan, dll. Jika Anda ingin mengikat properti tag html, Anda perlu menggunakan attr
:
<table lebar = "100%" batas = "10 piksel padat"> <tr> <th>Bulan</th> <th>Penghematan</th> </tr> <tr> <td [attr.colspan]=colnum>Januari</td> </tr> <tr> <td [attr.colspan]=colnum>Februari</td> </tr> </tabel> biarkan colnum:number = 2;
3.2 Gunakan host
untuk mengikat class
@Component({ pemilih: '.app-element', templat: './element.component.html', styleUrls: ['./element.component.css'], tuan rumah: { '[kelas.kelas-default]': 'useDefault' }, encapsulation: ViewEncapsulation.None // Biarkan elemen host juga menggunakan gaya element.component.css. Jika tidak, kapsul digunakan secara default untuk menghindari polusi CSS. }) kelas ekspor AppElementComponent { @Input() useDefault = benar; }
<div class="app-element"></div>
3.3 Gunakan style
pengikatan host
@Component({ pemilih: '.app-element', templat: './element.component.html', styleUrls: ['./element.component.css'], tuan rumah: { '[gaya.latar belakang]': 'inputBackground' } }) kelas ekspor AppElementComponent { @Input() inputBackground = 'merah'; }
<div class="app-element"></div>
3.4 Gunakan host
untuk mengikat peristiwa
@Component({ pemilih: '.app-element', templat: './element.component.html', styleUrls: ['./element.component.css'], tuan rumah: { '(klik)': 'onClick($acara)' } }) kelas ekspor AppElementComponent { publik onClick($acara) { konsol.log($acara); } }
<div class="app-element"></div>
encapsulation
(enkapsulasi)Strategi enkapsulasi gaya untuk template dan gaya CSS.
4.1 Komponen Web
merangkum komponen dengan cara yang terstandarisasi dan tidak mengganggu. Setiap komponen dapat mengatur struktur HTML, gaya CSS, dan kode JavaScript-nya sendiri tanpa不会干扰
elemen lain pada halaman.
Komponen Web terdiri dari empat teknologi berikut:
4.2 Shadow DOM
<!DOCTYPE html> <html> <kepala> <meta charset="UTF-8"> <title>DOM Bayangan</title> <gaya tipe="teks/css"> .shadowroot_son { warna: #f00; } </gaya> </kepala> <tubuh> <p>Saya tidak berada di Shadow Host</p> <div>Halo dunia!</div> <skrip> // host bayangan var shadowHost = dokumen.querySelector('.shadowhost'); // Membuat akar bayangan (akar bayangan) var shadowRoot = shadowHost.createShadowRoot(); // Akar bayangan adalah simpul pertama dari pohon bayangan, dan simpul lain seperti simpul p adalah simpul turunannya. shadowRoot.innerHTML = '<p>Saya berada di Shadow Host</p>'; </skrip> </tubuh> <html>
4.3 ViewEncapsulation
ViewEncapsulation memungkinkan pengaturan tiga nilai opsional:
4.3.1 ViewEncapsulation.None
import { Component, ViewEncapsulation } from '@angular/core'; @Komponen({ pemilih: 'aplikasi saya', templat: ` <h4>Selamat datang di Dunia Sudut</h4> <p class="greet">Halo {{name}}</p> `, gaya: [` .menyapa { latar belakang: #369; warna: putih; } `], enkapsulasi: ViewEncapsulation.None // Tidak Ada | }) kelas ekspor Komponen Aplikasi { nama: string = 'Semlinker'; }
Hasil dari pengaturan ViewEncapsulation.None
adalah tidak ada Shadow DOM
, dan semua gaya diterapkan ke整个
document
Dengan kata lain, gaya komponen akan受外界影响
dan mungkin覆盖
.
4.3.2 ViewEncapsulation.Emulated
impor { Komponen, ViewEncapsulation } dari '@angular/core'; @Komponen({ pemilih: 'aplikasi saya', ..., enkapsulasi: ViewEncapsulation.Emulated // Tidak Ada | }) kelas ekspor Komponen Aplikasi { nama: string = 'Semlinker'; }
Hasil dari setting ViewEncapsulation.Emulated
adalah tidak adanya Shadow DOM
, namun komponen dienkapsulasi melalui样式包装机制
yang disediakan oleh Angular
sehingga gaya komponen不受外部影响
. Meskipun gaya tersebut masih diterapkan ke整个document
, Angular membuat pemilih [_ngcontent-cmy-0]
untuk kelas .greet
. Terlihat bahwa为组件定义的样式,被Angular 修改了
. Diantaranya, _nghost-cmy- 和_ngcontent-cmy-
digunakan untuk实现局部的样式
.
4.3.3 ViewEncapsulation.ShadowDom
import { Komponen, ViewEncapsulation } dari '@angular/core'; @Komponen({ pemilih: 'aplikasi saya', ..., enkapsulasi: ViewEncapsulation.ShadowDom // Tidak Ada | }) kelas ekspor Komponen Aplikasi { nama: string = 'Semlinker'; }
Hasil dari setting ViewEncapsulation.ShadowDom
adalah menggunakan fitur Native Shadow DOM
. Angular akan Shadow DOM 形式渲染
yang didukung oleh browser.