2016-06-07 51 views
11

Ho un problema con scss e il cli: angular aggiunge un attributo _nghost-fyw-1 al tag apps (componente) durante il runtime. allo stesso tempo aggiunge un selettore di attributo al mio css chiamato _ngcontent-fyw-1 che ovviamente non funzionerà.Problemi di stile Angular2 causati dagli attributi DOM _ngcontent- * vs. _nghost- *

Hai un'idea di come potrei cambiare questo comportamento/evitarlo?

PS: si applica anche ai normali css. file di

miei componenti .scss assomiglia a questo:

my-comp { 
    h1 { 
    background-color: red; 
    } 
} 

risposta

25

Beh,

mi sono trovato la risposta. Utilizzando le impostazioni predefinite, è necessario che non sia fornire il selettore di wrapping my-comp nell'elemento css.

Utilizzare invece il selettore di elementi * per influire su tutti gli elementi nidificati in my-comp. In caso contrario, angolare tratterà il selettore my-comp come un elemento aggiuntivo e quindi aggiungerà l'attributo _ng-content-*, che ovviamente non è presente nel DOM.

Un'altra opzione è quella di disabilitare ViewEncapsulation per il componente - essere consapevoli che colpisce solo la componente my-comp

import {Component, ViewEncapsulation} from 'angular2/core' 

@Component({ 
    selector: 'my-comp', 
    encapsulation: ViewEncapsulation.None, 
    ... 
}); 

https://egghead.io/lessons/angular-2-controlling-how-styles-are-shared-with-view-encapsulation spiega le tre diverse modalità di impostazioni perfettamente.

+0

Non capisco la prima parte. Perché si dovrebbe usare '*'? Non è questo che ': host' è per? Ad ogni modo, ViewEncapsulation.None mi ha salvato la schiena quando uso un sintassi-evidenziatore antico. +1 –

+1

In altre parole. Imposta '{encapsulation: ViewEncapsulation.None}' nelle opzioni di dichiarazione del componente. –

13

Non hai fornito troppi dettagli in cui aggiungi i tuoi stili e quali elementi scegli come target con i selettori.

Il modo "ufficiale" se si desidera che gli stili per i confini degli elementi trasversali è quello di utilizzare >>> come

:host >>> h1 { 
    background-color: red; 
} 
  • :host obiettivi l'elemento corrente.
  • >>> (o /deep/) rende Angolare ignora gli attributi _nghost-xxx che viene utilizzato per l'emulazione di incapsulamento stile componente.

Vedi anche Styles in component for D3.js do not show in angular 2

+0

(deprecato)/deep /, >>> e :: ng-deep https://angular.io/guide/component-styles – borracciaBlu

+0

È possibile ignorare tale deprecazione. Non andrà via prima che ci sia un sostituto. –