Guide complet sur la directive v-bind dans Vue.js

Introduction à la liaison d'attributs dynamiques

La directive v-bind constitue un mécanisme essentiel de Vue.js pour relier dynamiquement des attributs HTML aux données de votre instance. Cet article explore ses multiples applications pratiques à travers des exemples concrets.

1. Fondamentaux de v-bind

Pour débuter, examinons comment lier des attributs de base comme les sources d'images et les URLs de liens.

Implémentation de base


<html lang="fr">
<head>
  <meta charset="UTF-8">
  <title>Liaison d'attributs dynamiques</title>
</head>
<body>

<div id="application">
  <figure>
    <img v-bind:src="photoUrl" alt="Illustration dynamique">
  </figure>
  <nav>
    <a v-bind:href="pageCible">Visiter le site</a>
  </nav>
  
  <hr>
  
  <!-- Syntaxe abrégée -->
  <figure>
    <img :src="photoUrl" alt="Illustration dynamique">
  </figure>
  <nav>
    <a :href="pageCible">Visiter le site</a>
  </nav>
</div>

<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>
  const application = new Vue({
    el: '#application',
    data: {
      photoUrl: 'https://via.placeholder.com/300x150/4A90E2/FFFFFF?text=Vue.js',
      pageCible: 'https://vuejs.org'
    }
  });
</script>

</body>
</html>

2. Application sur les classes CSS

La liaison de classes permet d'appliquer conditionnellement des styles en fonction de l'état de vos données.

Activation conditionnelle d'une classe


<html lang="fr">
<head>
  <meta charset="UTF-8">
  <title>Liaison dynamique de classes</title>
  <style>
    .highlighted {
      color: #E74C3C;
      font-weight: bold;
    }
  </style>
</head>
<body>

<div id="app-classes">
  <p :class="{highlighted: estActive}">Texte susceptible de mise en évidence</p>
</div>

<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>
  new Vue({
    el: '#app-classes',
    data: {
      estActive: true
    }
  });
</script>

</body>
</html>

3. Cas pratique : Navigation par sélection

Cosntruisons un menu interactif où l'élément sélectionné reçoit un style distinct.

Menu interactif avec v-for


<html lang="fr">
<head>
  <meta charset="UTF-8">
  <title>Navigation interactive</title>
  <style>
    .selected {
      background-color: #3498DB;
      color: white;
      padding: 8px;
      margin: 4px 0;
      border-radius: 4px;
    }
    li {
      cursor: pointer;
      list-style: none;
      padding: 8px;
    }
  </style>
</head>
<body>

<div id="app-menu">
  <ul>
    <li v-for="(langage, position) in langages"
        :key="position"
        :class="{selected: position === indexSelectionne}"
        @click="selectionnerElement(position)">
      {{ position + 1 }}. {{ langage }}
    </li>
  </ul>
</div>

<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>
  new Vue({
    el: '#app-menu',
    data: {
      langages: ['JavaScript', 'Python', 'Go', 'Rust', 'TypeScript'],
      indexSelectionne: 0
    },
    methods: {
      selectionnerElement(position) {
        this.indexSelectionne = position;
      }
    }
  });
</script>

</body>
</html>

4. Combinaisons avancées de classes

Vue.js supporte plusieurs stratégies pour appliquer simutlanément plusieurs classes dynamiques.

Techniques multiples de liaison


<html lang="fr">
<head>
  <meta charset="UTF-8">
  <title>Combinaisons de classes</title>
  <style>
    .bold { font-weight: 800; }
    .italic { font-style: italic; }
    .big { font-size: 2.5em; }
    .shadow { text-shadow: 2px 2px 4px rgba(0,0,0,0.3); }
  </style>
</head>
<body>

<div id="app-multi-classes">
  <!-- Classes conditionnelles -->
  <h3 :class="{bold: estGras, italic: estItalique}">Titre avec classes conditionnelles</h3>
  
  <!-- Mixage statique et dynamique -->
  <h3 class="big" :class="{bold: estGras, shadow: estOmbre}">Titre mixte</h3>
  
  <!-- Tableau de classes statiques -->
  <h3 class="big" :class="['bold', 'shadow']">Titre avec tableau de classes</h3>
</div>

<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>
  new Vue({
    el: '#app-multi-classes',
    data: {
      estGras: true,
      estItalique: false,
      estOmbre: true
    }
  });
</script>

</body>
</html>

5. Liaison d'attributs de style

Pour les styles inline, Vue.js offre une syntaxe objet particulièrement expressive.

Styles dyanmiques avec syntaxe objet


<html lang="fr">
<head>
  <meta charset="UTF-8">
  <title>Liaison de styles inline</title>
</head>
<body>

<div id="app-styles">
  <!-- Syntaxe directe -->
  <h4 :style="{color: couleurTexte, fontSize: taillePolice + 'px', textAlign: alignment}">
    Style déclaratif
  </h4>
  
  <!-- Objet de style réutilisable -->
  <h4 :style="objetStyle">Style via objet réutilisable</h4>
  
  <!-- Combinaison de plusieurs objets -->
  <h4 :style="[stylePartie1, stylePartie2]">Style combiné</h4>
</div>

<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>
  new Vue({
    el: '#app-styles',
    data: {
      couleurTexte: '#8E44AD',
      taillePolice: 36,
      alignment: 'center',
      objetStyle: {
        color: '#16A085',
        fontSize: '42px',
        letterSpacing: '2px'
      },
      stylePartie1: {
        fontSize: '28px',
        color: '#C0392B'
      },
      stylePartie2: {
        textDecoration: 'line-through',
        opacity: 0.7
      }
    }
  });
</script>

</body>
</html>

Ces patterns couvrent la majorité des cas d'usage courants pour la liaison dynamique d'attributs dans Vue.js, vous permettant de créer des interfaces réactives et maintenables.

Étiquettes: vuejs v-bind liaison-de-donnees class-binding style-binding

Publié le 5 octobre à 19h06