J'utilise le matériau 2 pour ajouter md-raised-button
. Je ne veux appliquer cette directive que si certaines conditions deviennent vraies.
Par exemple:
<button md-raised-button="true"></button>
Autre exemple: j'ai créé une forme réactive dynamique de base dans plunker. J'utilise une formArrayName
directive de forme réactive pour un tableau de contrôles. Je veux appliquer la formArrayName
directive uniquement si une condition spécifique devient vraie, sinon n'ajoutez pas de formArrayName
directive.
Voici un lien de plunker .
Réponses:
Je ne sais pas si vous pouvez appliquer des directives basées sur une condition, mais une solution de contournement consisterait à avoir 2 boutons et à les afficher en fonction d'une condition .
Edit: peut - être que ce sera utile.
la source
Si vous avez juste besoin d'ajouter un attribut pour déclencher des règles CSS, vous pouvez utiliser la méthode ci-dessous: (cela ne crée / détruit pas dynamiquement une directive)
<button [attr.md-raised-button]="condition ? '' : null"></button>
Appliqué la même chose à votre plunker: fourchette
Mettre à jour:
Comment
condition ? '' : null
fonctionne comme valeur:Quand c'est la chaîne vide (
''
) il devientattr.md-raised-button=""
, quand c'estnull
l'attribut n'existera pas.Mise à jour: mise à jour plunker: fork (problèmes de version corrigés, veuillez noter que la question était à l'origine basée sur angular 4)
la source
Comme indiqué précédemment, cela ne semble pas possible. Une chose qui peut être utilisée pour au moins éviter une certaine duplication est
ng-template
. Cela vous permet d'extraire le contenu de l'élément affecté par lengIf
branchement.Si vous souhaitez par exemple créer un composant de menu hiérarchique à l'aide d'un matériau angulaire:
Ici, la directive appliquée conditionnellement est
matMenuTriggerFor
, qui ne doit être appliquée qu'aux éléments de menu avec enfants. Le contenu du bouton est inséré aux deux endroits viangTemplateOutlet
.la source
Cela peut arriver tardivement, mais c'est une méthode viable et élégante pour appliquer une directive sous condition.
Dans la classe directive, créez la variable d'entrée:
Lors de l'application de la directive, définissez la propriété apply de la variable d'entrée:
Dans la méthode de la directive, vérifiez la variable this.options.apply et appliquez la logique directive basée sur la condition:
la source
Comme d'autres l'ont également indiqué,
directives
ne peut pas être appliqué dynamiquement.Cependant, si vous voulez simplement faire basculer
md-button
le style de plat à surélevé , alors ceferait l'affaire. Plunker
la source
Cela pourrait aussi être une solution:
[md-raised-button]="condition ? 'true' : ''"
Cela fonctionne pour angulaire 4, ionique 3 comme ceci:
[color]="condition ? 'primary' : ''"
oùcondition
est une fonction qui décide s'il s'agit d'une page active ou non. L'ensemble du code ressemble à ceci:<button *ngFor="let page of ..." [color]="isActivePage(page) ? 'primary' : ''">{{ page.title }}</button>
la source
Actuellement, il existe un
NO
moyen d'appliquer conditionnellement une directive à un composant.Cela n'est pas pris en charge.Les composants que vous avez créés peuvent être ajoutés ou supprimés de manière conditionnelle.Il y a déjà un problème créé pour le même avec
angular2
, donc cela devrait être le cas avec angular4 également.Vous pouvez également opter pour l'option avec ng-if
la source
Je n'ai pas pu trouver une bonne solution existante, alors j'ai construit ma propre directive qui fait cela.
Puis votre html:
<div dynamic-attr="{{hasMargin: 'margin-left' ? ''}}"></div>
la source
@HostBinding('attr.dynamic-attr') @Input('dynamic-attr') attr: string;
au lieu de ngOnInit + ElementRef.Peut-être que cela aidera quelqu'un.
Dans l'exemple ci-dessous, j'ai le
my-button.component.html
et je veux appliquer la*appHasPermission
directive au<button>
uniquement si l'role
attribut est défini.De cette façon, vous ne dupliquez pas le
<button>
code.la source
Oui c'est possible.
page html avec la directive appActiveAhover :)
directif
la source
Passer
null
à la directive le supprime!la source
Utilisation
NgClass
exemple de condition vraie:
ou une fonction booléenne
exemple complet:
Si vous voulez une classe par défaut:
la source
md-raised-button
attribut comme faux)J'ai une autre idée de ce que vous pourriez faire.
Vous pouvez stocker le html que vous souhaitez remplacer dans une variable sous forme de chaîne, puis y ajouter / supprimer la directive comme vous le souhaitez, en utilisant la
bypassSecurityTrustHtml
méthode du DomSanitizer .Je n'ai pas pour résultat une solution propre mais au moins vous n'avez pas besoin de répéter le code.
la source
Au 18 janvier 2019, c'est ainsi que j'ai ajouté une directive conditionnelle dans Angular 5 et au-dessus. J'avais besoin de changer la couleur du
<app-nav>
composant en fonction dedarkMode
. Si la page était en mode sombre ou non.Cela a fonctionné pour moi:
<app-nav [color]="darkMode ? 'orange':'green'"></app-nav>
J'espère que ça aidera quelqu'un.
ÉDITER
Cela modifie la valeur d'un attribut (couleur) en fonction d'une condition. Il arrive juste que la couleur soit définie à l'aide d'une directive. Donc, si vous lisez ceci, ne soyez pas confus, il ne s'agit pas d'appliquer une directive de manière conditionnelle (c'est-à-dire d'ajouter ou de supprimer une directive au dom en fonction d'une condition)
la source