Nie wiem, jak dodać do komponentu atrybut klasy<component></component>
dynamicznej, ale wewnątrz szablonu html (component.html).
Jedynym rozwiązaniem, jakie znalazłem, jest modyfikacja elementu za pomocą rodzimego elementu „ElementRef”. To rozwiązanie wydaje się trochę skomplikowane, aby zrobić coś, co powinno być bardzo proste.
Innym problemem jest to, że CSS musi zostać zdefiniowany poza zakresem komponentu, co zrywa z enkapsulacją komponentu.
Czy istnieje prostsze rozwiązanie? Coś jak <root [class]="..."> .... </ root>
w szablonie.
angular
angular2-template
lascarayf
źródło
źródło
someField = true
wngOnInit()
-method zamiastngAfterViewInit()
. W przeciwnym razie nie mogłem go uruchomić.:host
działającą część. Gdzie mogę dowiedzieć się więcej o parametrze hosta w dekoratorze @Component () (składnia nie jest dla mnie oczywista, a dokumentacja @Component nie wyjaśnia zbyt wiele ) lub dowiedzieć się więcej o preferowanym HostBinding (jest wymieniony tylko jako interfejs na Witryna Angular2?)@Input()
@Output()
@HostBinding()
@HostListener()
@ViewChild(ren)()
@ContentChild(ren)()
@HostBinding('class.xxx') get xxxclass(){ return !this.someField;}
Odpowiedź Güntera jest świetna (pytanie dotyczy dynamicznego atrybutu klasy), ale pomyślałem, że dodam tylko dla kompletności ...
Jeśli szukasz szybkiego i czystego sposobu na dodanie jednej lub więcej klas statycznych do elementu hosta komponentu (tj. Do celów stylizacji motywu), możesz po prostu:
A jeśli użyjesz klasy w tagu wejściowym, Angular scali klasy, tj.
źródło
ngcontent_host
niż którykolwiek z atrybutów elementów w moim szablonie, let's call those
ngcontent_template, so if I put a style in the
styleUrls` mojego komponentu, nie wpłyną one na element hosta, ponieważ nie wpłynąngcontent_host
, one może wpływać tylko na elementy szablonu; mogą tylko wpływaćngcontent_template
. Czy się mylę? Wszelkie sugestie na ten temat?ViewEncapsulation.None
@HostBinding('class.someClass') true;
. Możesz to zrobić nawet z dowolnej klasy, którą rozszerza twój komponent.{}
wariantu host :, możesz chcieć ustawićuse-host-property-decorator
ustawienie nafalse
intslint.json
. W przeciwnym razie otrzymasz ostrzeżenia IDE. @adamdport Ta metoda nie działa (już). Korzystanie z Angulara 5.2.2 w naszej aplikacji.Możesz po prostu dodać
@HostBinding('class') class = 'someClass';
do swojej klasy @Component .Przykład:
źródło
class
jako nazwa zmiennej (ponieważ można go odwołać i zmienić go później). Przykład:@HostBinding('className') myTheme = 'theme-dark';
.Jeśli chcesz dodać klasę dynamiczną do elementu hosta, możesz połączyć ją
HostBinding
z getter asDemo Stackblitz na https://stackblitz.com/edit/angular-dynamic-hostbinding
źródło
Oto jak to zrobiłem (Angular 7):
W komponencie dodaj dane wejściowe:
Następnie w szablonie HTML komponentu dodaj coś takiego:
I wreszcie w szablonie HTML, w którym komponent występuje:
Oświadczenie: Jestem dość nowy w Angular, więc mogę mieć szczęście!
źródło
<root>
tagu, a nie niczego, co dodajesz do szablonu elementu.