180 votes

VueJS ajoute conditionnellement un attribut pour un élément

Dans VueJS, nous pouvons ajouter ou supprimer un élément DOM en utilisant v-if :

<button v-if="isRequired">Important Button</button>

mais existe-t-il un moyen d'ajouter/supprimer les attributs d'un élément dom, par exemple, pour l'élément suivant, définir conditionnellement 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 ?

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 ou false " 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 essayer v-bind:name="name || false"

0 votes

Si c'est vrai, comment puis-je passer explicitement false au composant enfant via une prop ?

8voto

nikk wong Points 3124

Il est important de comprendre que si vous souhaitez ajouter des attributs de manière conditionnelle, vous pouvez également ajouter une déclaration dynamique :

<input v-bind="attrs" />

où attrs est déclaré comme un objet :

data() {
    return {
        attrs: {
            required: true,
            type: "text"
        }
    }
}

Ce qui aura pour conséquence :

<input required type="text"/>

Idéal dans les cas où il y a plusieurs attributs.

8voto

Zaheer Alvi Points 111

Vous pouvez ajouter deux points avant l'attribut (vous pouvez également utiliser des conditions) comme suit

<div :class="current? 'active': '' " > 
<button :disabled="InvalidForm? true : false " >

Si vous voulez définir une valeur dynamique comme les props, vous pouvez également utiliser les deux points avant le nom de l'attribut comme :

<Child :data="userList" />

2voto

Nipun Jain Points 911

En html, utilisez

<input :required="condition" />

Et définir dans la propriété des données comme

data () {
   return {
      condition: false
   }
}

0voto

Guilherme Nunes Points 11

Vous pouvez aussi utiliser le calcul

<input :required="isRequired" />

Calculé :

computed: {
   isRequired () {
      return someLogic //Boolean, true or false
   }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X