No sé cómo agregar a mi componente <component></component>
un atributo de clase dinámica , pero dentro de la plantilla html (component.html).
La única solución que encontré es modificar el elemento a través del elemento nativo "ElementRef". Esa solución parece un poco complicada para hacer algo que debería ser muy simple.
Otro problema es que CSS debe definirse fuera del alcance del componente, rompiendo la encapsulación del componente.
¿Hay una solución más simple? Algo así como <root [class]="..."> .... </ root>
dentro de la plantilla.
fuente
someField = true
enngOnInit()
lugar dengAfterViewInit()
. No podría hacerlo funcionar de otra manera.:host
parte real funcionando. ¿Dónde puedo obtener más información sobre el parámetro de host en el decorador @Component () (la sintaxis no me resulta obvia y la documentación de @Component no explica mucho ) u obtener más información sobre su HostBinding preferido (solo aparece como una interfaz en Angular2 sitio?)@Input()
@Output()
@HostBinding()
@HostListener()
@ViewChild(ren)()
@ContentChild(ren)()
@HostBinding('class.xxx') get xxxclass(){ return !this.someField;}
La respuesta de Günter es excelente (la pregunta es el atributo de clase dinámica ), pero pensé que agregaría solo para completar ...
Si está buscando una forma rápida y limpia de agregar una o más clases estáticas al elemento host de su componente (es decir, para fines de diseño de temas), puede hacer lo siguiente:
Y si usa una clase en la etiqueta de entrada, Angular fusionará las clases, es decir,
fuente
ngcontent_host
a cualquiera de los atributos en los elementos de mi plantilla, let's call those
ngcontent_template, so if I put a style in the
styleUrls` de mi componente, no afectarán al elemento host porque no afectaránngcontent_host
, ellos solo puede afectar elementos de plantilla; solo pueden afectarngcontent_template
. ¿Estoy equivocado? ¿Alguna sugerencia sobre esto? Supongo que siempre podría girarViewEncapsulation.None
@HostBinding('class.someClass') true;
. Incluso puede hacer esto desde cualquier clase que extienda su componente.{}
variante host: es posible que desee establecer lause-host-property-decorator
configuraciónfalse
entslint.json
. De lo contrario, recibirá advertencias IDE. @adamdport Ese método ya no funciona (más). Usando Angular 5.2.2 en nuestra aplicación.Simplemente puede agregar
@HostBinding('class') class = 'someClass';
dentro de su clase @Component .Ejemplo:
fuente
class
como un nombre de variable (ya que puede hacer referencia a ella y cambiarla más adelante). Ejemplo:@HostBinding('className') myTheme = 'theme-dark';
.Si desea agregar una clase dinámica a su elemento host, puede combinarlo
HostBinding
con un getter comoDemo de Stackblitz en https://stackblitz.com/edit/angular-dynamic-hostbinding
fuente
Así es como lo hice (Angular 7):
En el componente, agregue una entrada:
Luego, en la plantilla HTML del componente, agregue algo como:
Y, por último, en la plantilla HTML donde instancia el componente:
Descargo de responsabilidad: soy bastante nuevo en Angular, ¡así que podría tener suerte aquí!
fuente
<root>
etiqueta, no nada que agregue a la plantilla del elemento.