Saya tidak tahu bagaimana cara menambahkan atribut kelas<component></component>
dinamis ke komponen saya tetapi di dalam templat html (component.html).
Satu-satunya solusi yang saya temukan adalah memodifikasi item melalui elemen asli "ElementRef". Solusi itu tampaknya agak rumit untuk melakukan sesuatu yang seharusnya sangat sederhana.
Masalah lain adalah bahwa CSS harus didefinisikan di luar lingkup komponen, melanggar enkapsulasi komponen.
Apakah ada solusi yang lebih sederhana? Sesuatu seperti <root [class]="..."> .... </ root>
di dalam templat.
sumber
someField = true
di- metodengOnInit()
bukanngAfterViewInit()
. Saya tidak bisa membuatnya bekerja sebaliknya.:host
berfungsi. Di mana saya dapat mempelajari lebih lanjut tentang parameter host di @Component () dekorator (sintaksinya tidak jelas bagi saya, dan dokumentasi @Component tidak menjelaskan banyak hal ) atau mempelajari lebih lanjut tentang HostBinding pilihan Anda (hanya terdaftar sebagai Antarmuka di Situs Angular2?)@Input()
@Output()
@HostBinding()
@HostListener()
@ViewChild(ren)()
@ContentChild(ren)()
@HostBinding('class.xxx') get xxxclass(){ return !this.someField;}
Jawaban Günter bagus (pertanyaannya adalah meminta atribut kelas dinamis ) tapi saya pikir saya akan menambahkan hanya untuk kelengkapan ...
Jika Anda mencari cara cepat dan bersih untuk menambahkan satu atau lebih kelas statis ke elemen host komponen Anda (yaitu, untuk keperluan penataan tema) Anda bisa melakukannya:
Dan jika Anda menggunakan kelas pada tag entri, Angular akan menggabungkan kelas, yaitu,
sumber
ngcontent_host
daripada atribut pada elemen di template saya, let's call those
ngcontent_template, so if I put a style in the
styleUrls` dari komponen saya, mereka tidak akan mempengaruhi elemen host karena mereka tidak akan mempengaruhingcontent_host
, mereka hanya dapat memengaruhi elemen template; mereka hanya dapat mempengaruhingcontent_template
. Apakah saya salah? Ada saran tentang ini? Saya kira saya selalu bisa mengubahViewEncapsulation.None
@HostBinding('class.someClass') true;
,. Anda bahkan dapat melakukan ini dari kelas apa pun yang diperluas komponen Anda.{}
varian, Anda mungkin ingin setuse-host-property-decorator
pengaturan untukfalse
ditslint.json
. Kalau tidak, Anda akan menerima peringatan IDE. @adamdport Metode itu tidak berfungsi (lagi). Menggunakan Angular 5.2.2 di aplikasi kami.Anda bisa menambahkan
@HostBinding('class') class = 'someClass';
di dalam kelas @Component Anda .Contoh:
sumber
class
sebagai nama variabel (karena Anda mungkin referensi dan mengubahnya nanti). Contoh:@HostBinding('className') myTheme = 'theme-dark';
.Jika Anda ingin menambahkan kelas dinamis ke elemen host Anda, Anda dapat menggabungkan Anda
HostBinding
dengan pengambil sebagaiStackblitz demo di https://stackblitz.com/edit/angular-dynamic-hostbinding
sumber
Inilah cara saya melakukannya (Sudut 7):
Dalam komponen, tambahkan input:
Kemudian di dalam templat HTML komponen tambahkan sesuatu seperti:
Dan akhirnya di templat HTML tempat Anda membuat instance komponen:
Penafian: Saya cukup baru di Angular, jadi saya mungkin beruntung di sini!
sumber
<root>
tag, tidak apa pun yang Anda tambahkan ke template elemen.