Angenommen, wir möchten eine Komponente aus einer Bibliothek in angular2 verwenden (Beispiel aus material2). Die Komponente Anmerkung sieht wie folgt aus:Stil der wiederverwendbaren angular2-Komponente erweitern/überschreiben
@Component({
moduleId: module.id,
selector: 'md-input',
templateUrl: 'input.html',
styleUrls: ['input.css'],
providers: [MD_INPUT_CONTROL_VALUE_ACCESSOR],
host: {'(click)' : 'focus()'}
})
Diese Komponente wird mit einem „default“ Sheet, das „input.css“. Wenn wir diese Komponente in unserer App verwenden, möchten wir wahrscheinlich einen Teil des Stils überschreiben/erweitern, ohne die Komponente selbst zu kopieren und zu manipulieren. Wie macht man das?
Mögliche Lösung 1: Stellen Sie die Verkapselung auf „ViewEncapsulation.None“:
Das ist nicht wirklich eine Lösung, nur eine Abhilfe.
Mögliche Lösung 2: Verwenden Sie ":: Schatten" oder "/ deep /" in CSS:
funktioniert auch, aber seine veralteten nach WebComponent spec.
Mögliche Lösung 3: Verwenden Sie globale CSS und überschreiben Sie die Komponente CSS:
funktioniert auch, aber es verstößt gegen die Schatten DOM-Konzept.
Mögliche Lösung 4: Überschreiben Sie direkt in der Vorlage der Stammkomponente:
Beispiel:
<my-cmp [font-size]="100"></my-cmp>
ist nicht wirklich geeignet, wenn wir viele zwingende tun.
Mögliche Lösung 5: außer Kraft setzen oder die „@Component“ Definition mit einem zusätzlichen Sheet erweitert irgendwie:
Dies scheint die einzig richtige Lösung (zumindest für mich) zu sein. Aber ich habe keine Ahnung, wie man das macht ...
Irgendwelche Ratschläge dazu? Vielleicht habe ich etwas falsch gemacht ... Danke.
Dank für diese Klarstellung – patrickkeller
Sie sollten sich bewusst sein, dass Dekorateure Verlängerung nicht durch die Offline-Template Compiler unterstützt werden und wird abgeraten https://github.com/angular/angular/issues/7968 # issuecomment-223779992 –