Supponendo di voler utilizzare un componente da qualche libreria in angular2 (esempio da material2). L'annotazione del componente è simile a questa:Estendere/Ignorare lo stile del componente angolare2 riutilizzabile
@Component({
moduleId: module.id,
selector: 'md-input',
templateUrl: 'input.html',
styleUrls: ['input.css'],
providers: [MD_INPUT_CONTROL_VALUE_ACCESSOR],
host: {'(click)' : 'focus()'}
})
Questo componente viene fornito con un foglio di stile "predefinito", "input.css". Se usiamo questo componente nella nostra app probabilmente vorremmo sovrascrivere/estendere alcuni stili, senza copiare e manipolare il componente stesso. Come fare questo?
Possibile Soluzione 1: Impostare l'incapsulamento a "ViewEncapsulation.None":
Questo non è davvero una soluzione, solo una soluzione temporanea.
Possibile Soluzione 2: Usare ":: ombra" o "/ profondità /" nei CSS:
funziona anche, ma la sua deprecato in base alle WebComponent spec.
Possibile Soluzione 3: Usare CSS globale e sostituiscono il CSS componente:
funziona anche, ma viola il concetto dell'ombra DOM.
Possibile Soluzione 4: Override direttamente nel modello di componente principale:
Esempio:
<my-cmp [font-size]="100"></my-cmp>
non è veramente adatto se facciamo un sacco di rilevante.
Possibile Soluzione 5: Override o estendere la definizione di "@Component" con un foglio di stile in qualche modo aggiuntivo:
Questa sembra essere l'unica soluzione corretta (almeno per me). Ma non ho idea di come fare questo ...
Qualche consiglio su questo? Forse ho qualcosa di sbagliato ... Grazie.
grazie per questo chiarimento – patrickkeller
È necessario essere consapevoli che l'estensione decoratori non sarà supportato dal compilatore modello non in linea e si scoraggia https://github.com/angular/angular/temi/7968 # issuecomment-223.779.992 –