Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

309
Views
Pase el selector de ID de encapsulación de vista a una clase @Input css del padre

Ok, entonces sabemos que ng-deep no es la mejor práctica, y sabemos que ViewEncapsulation.None se vuelve asqueroso. Así que aquí está mi pregunta, lo que quiero hacer es esto.

Digamos que tengo un componente con;

@Input() cssClasses: string;

Luego, en el componente principal que lo usa, hago algo como;

<my-component [cssClasses]="some-css-class some-other-css-class"></my-component>

Ahora, donde se pasan esas clases, quiero agregar la identificación del selector generado por los componentes a esas clases para que cuando se representen en el DOM coincidan con las clases css del componente consumidor como la salida que veríamos del componente secundario;

<div class="class1 class2 some-css-class some-other-css-class"></div>

El problema aquí es obviamente que viewEncapsulation adjuntará al selector de ID del componente las clases del componente, pero NO las que se le pasan. Entonces, sin ng-deep o colocando las clases en un archivo css de inicio de nivel superior, no se aplicarán porque los selectores salen así;

 [_ngStuff-blah-123] .class1 {...} [_ngStuff-blah-123] .class2 {...}

Pero dado que some-css-class some-other-css-class nunca obtiene el selector de id de la clase css derivada a través de @Input del niño, en realidad no se aplican. A menos que se declaren, tiene ng-deep o si está en un css de nivel superior que no está conectado a otro componente o lo que sea.

¿Cómo se agrega el contexto del componente de consumo para que termine con una salida como;

 [_ngStuff-blah-123] .class1 {...} [_ngStuff-blah-123] .class2 {...} [_ngStuff-parent-999] [_ngStuff-blah-123] .some-css-class {...} [_ngStuff-parent-999] [_ngStuff-blah-123] .some-other-css-class {...}

¿En lugar de simplemente usar ngStyle , ng-deep o inicio de nivel superior?

¿Hay alguna manera de que pueda hacer algo cuando uso el componente secundario como;

<my-component [cssClasses]="some-css-class some-other-css-class" [hostContext]="this.parent.idContext"></my-component>

¿Para que la salida DOM se parezca al ejemplo anterior y podamos utilizar algún paso de clase específico de instancia SIN ng-deep etc.? Seguramente no soy el primero en preguntar, así que disculpas si esto es un duplicado.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Desea usar host-context que le da estilo al niño en función de las clases CSS en el padre, no es necesario pasar las clases. Esencialmente, funciona de esta manera. Aquí está el CSS en el componente secundario:

 :host-context(.wrapper-blue) .hello { color: blue } :host-context(.wrapper-red) .hello { color: red }

HTML en el niño:

 <div class="hello"> hello <!-- color depends on the class wrapping me in the parent --> </div>

Y el HTML en el padre se ve así:

 <div class="wrapper-red"> <app-child-component><app-child-component> </div> <div class="wrapper-blue"> <app-child-component><app-child-component> </div>

Ha pasado un tiempo desde que usé esto, por lo que mi sintaxis puede estar un poco mal, pero entiendes la idea. Google Angular host-context y encontrará lo que necesita. O mira aquí estas publicaciones SO:

¿Cuál es el caso de uso de: selector de contexto de host en angular?

No puedo entender el uso de: host en componentes en Angular2

Buena publicación aquí que parece mejor que las otras:

https://blog.angular-university.io/angular-host-context/#thehostcontextpseudoclasselector

¡Aquí están los documentos oficiales que prueban que NO está obsoleto!

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!