Dans VueJS, nous pouvons ajouter ou supprimer un élément DOM en utilisant v-if:
<button v-if="isRequired">Important Button</button>
mais y a-t-il un moyen d'ajouter / supprimer des attributs d'un élément dom, par exemple pour les éléments suivants, définissez sous condition l'attribut requis:
Username: <input type="text" name="username" required>
par quelque chose de similaire à:
Username: <input type="text" name="username" v-if="name.required" required>
Des idées?
javascript
vue.js
vuejs2
Don Smythe
la source
la source
null
,undefined
oufalse
» qui est différent d'un script JS évaluation à false. Cela signifie qu'une chaîne vide est fausse en JavaScript, mais qu'elle ajouterait quand même l'attribut au DOM. Pour éviter que vous puissiez essayerv-bind:name="name || false"
false
un composant enfant via un accessoire?'false'
. Dans d'autres cas, lorsque vous devez contrôler la présence d'un attribut html non booléen sur l'élément, vous pouvez utiliser le rendu conditionnel avecv-if
comme suggéré ici: github.com/vuejs/vue/issues/7552#issuecomment-361395234attribute
mais PASprop
. Nous pouvons en toute sécurité passer explicitementfalse
via une propriété de composant mais PAS un attribut (qui n'est pas reconnu comme une propriété). Ai-je raison?Réponses:
Essayer:
la source
<input v-bind:required="test ? true : false">
anythingAtAll : ? true : false
(ouif (condition) { return true; } else { return false; }
) dans n'importe quelle langue est ... inconvenant . Utilisez simplementreturn (condition)
ou, dans ce cas,<input :required="test">
test
estboolean
, vous pouvez simplement utiliser:required="test"
String
valeur,false
vous obtiendrez unetype check
erreur en la définissant . Alors réglez-le sur auundefined
lieu de false. docs:required="required"
whererequired
est une propriété de composant booléen entraîne <el required = "required"> pour moiForme la plus simple:
la source
String
valeur,false
vous obtiendrez unetype check
erreur en la définissant . Alors réglez-le sur auundefined
lieu de false. docs!!
Je n'ai jamais vu cette syntaxe avant hier et lors d'une révision de code, je suis tombé sur ceci: -<input :required="!!!recipe.checked" v-model="recipe.pieType"><select :required="!!!recipe.checked" v-model="recipe.ingredients" :options="ingredients"></select>
Savez-vous ce que!!!
(3) signifie pour une:required
valeur? Merci.<input :required="condition">
Vous n'en avez pas besoin
<input :required="test ? true : false">
car si test est véridique, vous obtiendrez déjà l'required
attribut, et si test est faux, vous n'obtiendrez pas l'attribut. Latrue : false
partie est redondante, un peu comme ça ...Le moyen le plus simple de faire cette liaison est donc
<input :required="condition">
Ce n'est que si le test (ou la condition ) peut être mal interprété que vous devrez faire autre chose; dans ce cas, l'utilisation de Syed
!!
fait l'affaire.<input :required="!!condition">
la source
Vous pouvez passer
boolean
en le contraignant, mettre!!
avant la variable.Mais je voudrais attirer votre attention sur le cas suivant où le composant récepteur a défini
type
pour les accessoires. Dans ce cas, siisRequired
a défini le type àstring
passer, laboolean
vérification du type échoue et vous obtiendrez un avertissement Vue. Pour résoudre ce problème, vous voudrez peut-être éviter de passer cet accessoire, alors mettez simplement unundefined
repli et l'accessoire ne sera pas envoyé àcomponent
Explication
J'ai traversé le même problème et j'ai essayé les solutions ci-dessus !! Oui, je ne vois pas le
prop
mais cela ne remplit pas réellement ce qui est requis ici.Mon problème -
Dans le cas ci-dessus, ce à quoi je m'attendais, c'est de ne pas avoir
my-prop
été transmis au composant enfant -<any-conponent/>
je ne vois pas leprop
inDOM
mais dans mon<any-component/>
composant, une erreur apparaît lors de l'échec de la vérification de type prop. Comme dans le composant enfant, je m'attendsmy-prop
à être unString
mais c'est le casboolean
.Ce qui signifie que le composant enfant a reçu l'accessoire même s'il l'est
false
. Tweak ici est de laisser le composant enfant prendre ledefault-value
et également sauter le contrôle. Passéundefined
Travaux cependant!Cela fonctionne et mon accessoire enfant a la valeur par défaut.
la source
En utilisation html
Et définissez dans la propriété de données comme
la source