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

113
Views
Estilos Angular2 en una directiva

En los ejemplos dados de directivas de atributos (es decir, una directiva para agregar apariencia/comportamiento), tenemos una configuración bastante simple de un estilo en el elemento host... por ejemplo

 import {Directive, ElementRef } from 'angular2/core'; @Directive({ selector: '[myHighlight]' }) export class HighlightDirective { constructor(element) { element.nativeElement.style.backgroundColor = 'yellow'; } static get parameters(){ return [[ElementRef]]; }

En lugar de establecer el estilo, ¿puedo usar un estilo en su lugar? p.ej

 @Directive({ selector: '[myHighlight]', styles: [':host { background-color: yellow; }'] })

¿Esto no parece funcionar para mí?

Estoy haciendo algo un poco más complejo que ha llevado a una buena cantidad de código monolítico, estableciendo muchos estilos, usando AnimationBuilder, etc. Me parece que sería mucho mejor separar esto en clases y animaciones en un CSS.

ViewEncapsulation = emulado/predeterminado si eso importa?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Puede usar el enlace de host para enlazar atributos de estilo:

 @Directive({ selector: '[myHighlight]', host: { '[style.background-color]': '"yellow"', } })

o

 @Directive({ selector: '[myHighlight]', }) class MyDirective { @HostBinding('style.background-color') backgroundColor:string = 'yellow'; }
over 4 years ago · Santiago Trujillo Report

0

Si bien las otras respuestas son útiles en la mayoría de las circunstancias, parece que necesita un enfoque de hoja de estilo CSS más tradicional como el que tuve para un caso de uso.

El problema es el valor predeterminado de Angular de emular un Shadow DOM que abarca los estilos solo dentro del elemento host.

DOS OPCIONES:

1)

Puede decirle a Angular que coloque en cascada sus estilos a través de todos sus descendientes usando :host /deep/ .some-style-to-cascade-down-like-normal {} o reemplace /deep/ con >>> . Consulte los documentos de Angular sobre esto.

Tres cosas importantes a tener en cuenta:

  • ViewEncapsulation debe ser su estado predeterminado (emulado)
  • Angular/Chrome están desaprobando ambas sintaxis mientras trabajan en un mejor enfoque
  • Si está utilizando Angular CLI, debe usar /deep/ en lugar de >>>

2)

Aunque perderá la encapsulación del componente con ámbito (si eso es importante en su caso), aquí hay un ejemplo que usa "myHighlight" como una directiva aunque TypeScripted como un componente para que pueda importar la hoja de estilo:

USO:
<p myHighlight>Highlight me!</p>

TS (componente tratado como una directiva ):

 import { Component, ViewEncapsulation } from '@angular/core'; @Component({ selector: 'p[myHighlight]', // Refer to it like an attribute directive templateUrl: './my-highlight.component.html', styleUrls: ['./my-highlight.component.scss'], encapsulation: ViewEncapsulation.None // Tell Angular to not scope your styles })

El botón de Angular Material 2 utiliza este mismo enfoque para resolver este problema.

Y aquí hay un excelente artículo llamado Todas las formas de agregar CSS a los componentes de Angular 2 que me hizo tomar conciencia y explica cómo Angular trata las tres propiedades de ViewEncapsulation.

over 4 years ago · Santiago Trujillo Report

0

He leído tu comentario debajo de la primera respuesta. No sé cómo serías capaz de aplicar tus 30 reglas. Pero hay pocas formas aquí: plunker .

 selector:"[myHighlight]", host: { '(mouseenter)':'changeColor()', '[style.background]': '"pink"', '(click)':'clickMe()', '(mouseout)':'changeColorOnOut()', }
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!