Não sei como adicionar ao meu componente <component></component>
um atributo de classe dinâmica, mas dentro do modelo html (component.html).
A única solução que encontrei é modificar o item via elemento nativo "ElementRef". Essa solução parece um pouco complicada para fazer algo que deve ser muito simples.
Outro problema é que o CSS deve ser definido fora do escopo do componente, quebrando o encapsulamento do componente.
Existe uma solução mais simples? Algo como <root [class]="..."> .... </ root>
dentro do modelo.
angular
angular2-template
lascarayf
fonte
fonte
someField = true
emngOnInit()
-method em vez dengAfterViewInit()
. Eu não poderia fazê-lo funcionar de outra maneira.:host
peça real funcionando. Onde posso aprender mais sobre o parâmetro host no decorador @Component () (a sintaxe não é óbvia para mim e a documentação do @Component não explica muito ) ou saber mais sobre o HostBinding preferido (ele é listado apenas como uma interface no Angular2 site?)@Input()
@Output()
@HostBinding()
@HostListener()
@ViewChild(ren)()
@ContentChild(ren)()
@HostBinding('class.xxx') get xxxclass(){ return !this.someField;}
A resposta de Günter é ótima (a pergunta está pedindo atributo de classe dinâmica ), mas pensei em adicionar apenas por estar completo ...
Se você está procurando uma maneira rápida e limpa de adicionar uma ou mais classes estáticas ao elemento host do seu componente (por exemplo, para fins de estilo de tema), basta fazer o seguinte:
E se você usar uma classe na tag de entrada, o Angular mesclará as classes, ou seja,
fonte
ngcontent_host
de qualquer um dos atributos nos elementos do meu modelo, let's call those
ngcontent_template, so if I put a style in the
styleUrls` do meu componente, eles não afetarão o elemento host porque não afetarãongcontent_host
, eles pode afetar apenas elementos do modelo; eles só podem afetarngcontent_template
. Estou enganado? Alguma sugestão sobre isso? Eu acho que sempre poderia virarViewEncapsulation.None
@HostBinding('class.someClass') true;
,. Você pode fazer isso de qualquer classe que seu componente estender.{}
variante host :, poderá definir ause-host-property-decorator
configuração comofalse
intslint.json
. Caso contrário, você receberá avisos do IDE. @adamdport Esse método não funciona (mais). Usando Angular 5.2.2 em nosso aplicativo.Você pode simplesmente adicionar
@HostBinding('class') class = 'someClass';
dentro da sua classe @Component .Exemplo:
fonte
class
como um nome de variável (pois você pode fazer referência a ela e alterá-la posteriormente). Exemplo:@HostBinding('className') myTheme = 'theme-dark';
.Se você deseja adicionar uma classe dinâmica ao seu elemento host, você pode combiná-lo
HostBinding
com um getter comoDemonstração do Stackblitz em https://stackblitz.com/edit/angular-dynamic-hostbinding
fonte
Aqui está como eu fiz (Angular 7):
No componente, adicione uma entrada:
Em seguida, no modelo HTML do componente, adicione algo como:
E, finalmente, no modelo HTML em que você instala o componente:
Exoneração de responsabilidade: Eu sou bastante novo no Angular, então talvez eu esteja tendo sorte aqui!
fonte
<root>
tag, e não qualquer coisa que você adiciona ao modelo do elemento.