Vous pouvez passer boolean
en le contraignant, en mettant !!
avant la variable.
let isRequired = '' || null || undefined
<input :required="!!isRequired"> // it will coerce value to respective boolean
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, si isRequired
a défini le type comme étant string
puis en passant boolean
faites en sorte que la vérification du type échoue et vous obtiendrez un avertissement de Vue. Pour corriger cela, vous pouvez éviter de passer cette prop, donc mettez simplement undefined
et la proposition ne sera pas envoyée à component
let isValue = false
<any-component
:my-prop="isValue ? 'Hey I am when the value exist' : undefined"
/>
Explication
J'ai rencontré le même problème et j'ai essayé les solutions ci-dessus ! Oui, je ne vois pas le prop
mais cela ne répond pas à ce qui est demandé ici.
Mon problème -
let isValid = false
<any-component
:my-prop="isValue ? 'Hey I am when the value exist': false"
/>
Dans le cas ci-dessus, ce à quoi je m'attendais n'est pas d'avoir my-prop
sont transmises au composant enfant - <any-conponent/>
Je ne vois pas le prop
sur DOM
mais dans mon <any-component/>
une erreur apparaît à la suite de l'échec de la vérification du type de prop. Comme dans le composant enfant, je m'attends à ce que my-prop
pour être un String
mais c'est boolean
.
myProp : {
type: String,
required: false,
default: ''
}
Ce qui signifie que le composant enfant a reçu la prop même s'il est false
. L'astuce ici est de laisser le composant enfant prendre le contrôle de l'application. default-value
et aussi sauter le contrôle. Réussi undefined
fonctionne cependant !
<any-component
:my-prop="isValue ? 'Hey I am when the value exist' : undefined"
/>
Cela fonctionne et ma prop enfant a la valeur par défaut.
8 votes
Bien que ce ne soit pas si évident (d'où la confusion), la documentation dit en fait que si la valeur de l'attribut est évaluée à false, l'attribut est alors omis ( vuejs.org/v2/guide/syntaxe.html#Attributs )
0 votes
En fait, la documentation indique que l'attribut ne sera pas ajouté si " a la valeur de
null
,undefined
oufalse
" ce qui est différent d'un script JS évaluant à 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 cela, vous pouvez essayerv-bind:name="name || false"
0 votes
Si c'est vrai, comment puis-je passer explicitement
false
au composant enfant via une prop ?0 votes
@BruceSun , Si l'attribut dans le contexte disparaît "involontairement" lorsque vous lui donnez une fausse valeur, essayez de le passer comme une chaîne de caractères.
'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 avec la fonctionv-if
comme suggéré ici : github.com/vuejs/vue/issues/7552#issuecomment-3613952340 votes
AlexanderB Je pense que je dois me corriger. Je devrais dire
attribute
mais PASprop
. Nous pouvons sans risque passer explicitementfalse
via une propriété du composant mais PAS l'attribut (qui n'est pas reconnu comme une propriété). Ai-je raison ?