2017-06-16 3 views
1

J'essaie d'étendre le composant matériau angulaire pour donner CSS personnalisé. Je souhaite utiliser le même composant mais juste changer le CSS. Si son thème, je peux changer les propriétés mais je veux changer le style qui est codé en dur dans le composant. Donc, j'essaie d'étendre le composant. Voici ce que j'ai fait.Extension composant angulaire (seulement décorateur)

@Component({ 
    selector: 'my-tab-nav-bar', 
    styles: [``] // custom css here 
}) 
export class TabNavBarComponent extends MdTabNavBar { 
} 

Cet échec échoue en tant que modèle n'est pas spécifié. Donc, j'ajoute aussi un template. Donc, je copie coller le modèle.

@Component({ 
    selector: 'my-tab-nav-bar', 
    template: `<div class=\"mat-tab-links\"> 
       <ng-content></ng-content> 
      <md-ink-bar></md-ink-bar> </div> `, 

    styles: [``] // custom css here 
}) 
export class TabNavBarComponent extends MdTabNavBar { 
} 

Maintenant, le problème est qu'il ne sait pas ce qui est md-ink-bar et sa non exportés en angle. Y at-il de toute façon je peux étendre juste en changeant le css.

+0

Ne pouvez-vous pas simplement ajouter votre propre feuille de style globale qui ajoute et remplace les styles intégrés? De cette façon, vous n'avez pas besoin de créer un nouveau composant juste pour changer de CSS. – Raven

+0

True. Mais il y a tellement de changements, le fichier styles.scss entier est rempli de styles '! Important '. Nous allons l'utiliser dans de nombreux projets, pensé que je vais juste étendre les composants de base et avoir nos propres composants. Je ne m'attendais pas à ce que ce – Skeptor

+0

Angular Material ne puisse pas utiliser n'importe quel '! Important' dans leurs styles. Votre style ne l'annulera-t-il pas automatiquement s'il s'agit de la dernière définition chargée? – Raven

Répondre

1

C'est une solution de contournement

J'ai créé une nouvelle directive

@Directive({ 
    selector: '[myTabNavBar]', 
}) 
export class TabNavBarDirective { 
    @HostBinding('style.background-color') 
    backgroundColor: string = 'yellow'; 
} 

code source de How to add CSS to directive

Dans mon HTML,

<nav 
     myTabNavBar 
     md-tab-nav-bar 
     flex> 

Cela fonctionne pour le moment étant. Mais encore je suis curieux comment étendre le style de composants.