Comment appliquer de la classe css à un élément de composant lorsqu'il est créé par le routeur de sortie?
J'ai des DOM qui ressemble à quelque chose comme ceci:
<app>
<router-outlet></router-outlet>
<project>...</project>
</app>
où project
élément est inséré par le routeur.
Comment puis-je ajouter une classe à cet élément?
Vous devez vous connecter pour publier un commentaire.
En supposant que vous voulez toujours la classe appliquée à ce composant, vous pouvez utiliser
host
dans votre composant de métadonnées:Résultant dans:
<router-outlet class="...">...
ne fonctionne pas :/La clé est /deep/ mot-clé:
Cela fonctionne sans aucun des configurations supplémentaires.
:host /deep/router-outlet + *
pour tout ce composant dynamiquement créé par Angulaire Routeur.Édité 2018/3/5:
Depuis Angulaire 4.3.0 fait
/deep/
obsolète, son alternative proposée est::ng-deep
. Et il y avait un longue discussion à ce sujet./deep/
est obsolète. Par cette question,::ng-deep
peut-être est-ce de remplacement pour l'instant.::ng-deep
est maintenant obsolète (v8.0.0)utiliser le
adjacent sibling selector
et la*
générique pour sélectionner l'élément suivant immédiatement larouter-outlet
les styles.css
[_nghost_c1]
-comme attribut, commerouter-outlet + *[_nghost_c1]
. Ce qui est également ajouté à mon css (je suis de la compilation scss, c'est peut-être la raison), et il n'est pas appliquée à l'élément suivant qui est couverte d'une autre manière.::ng-deep router-outlet.router-flex + * { display: flex; flex: 1 1 auto; flex-direction: column }
et de le définir dans le composant. ET QUE PERSONNE NE OSE DIRE SON OBSOLÈTE.<router-outlet>
. Les entrants et les sortants. Pour le résoudre, il suffit de remplacer le '+' par un '~'. C'estrouter-outlet ~ *
.Vous pouvez utiliser le adjacents sélecteur de frères
https://developer.mozilla.org/en/docs/Web/CSS/Adjacent_sibling_selectors
mais seulement si @drewmoore approche ne s'applique pas.
Vous pouvez le faire avec un
HostBinding
, qui est effectivement le même que l'utilisation de lahost
propriété qui a déjà été mentionné, bien que cette méthode renvoie une TSLint erreur par défaut de règlement de cotation.Dans votre composant sur lequel vous souhaitez appliquer une classe:
Et ensuite dans le répertoire racine de votre
styles.scss
fichier, vous pouvez ajouter les éléments suivants:Si vous avez besoin d'ajouter une classe, sous certaines conditions, vous pouvez l'ajouter par programme à partir de la composante:
Cela fonctionne pour moi
Actuellement, Angulaire 6 m'a recommandé d'utiliser @HostBindings et @HostListeners au lieu de l'accueil à la propriété:
J'ai créé un
RouterOutletHelperDirective
qui peuvent être modifiés au besoin.Votre cas d'utilisation peut être différente, mais pour moi :
ActivatedRoute
de données.Vous l'utilisez comme ceci (la classe est facultatif):
Puis créer la directive, d'ajouter et de les exporter vers votre application module.