Fondamentaux de Vue.js

Installation et configuration

Avantages du CLI Vue

L'outil CLI de Vue.js repose sur Webpack pour créer un environnement de développement optimisé. Il offre :

  • Compilation des fichiers directement dans l'environnement plutôt que dans le navigateur
  • Utilisation native de la syntaxe ES6+
  • Minification et regroupement des scripts en un seul fichier
  • Rechargement automatique des modules durant le développement

Prérequis système

  • Node.js version 6.9 ou supérieure
  • npm version 3.10 ou supérieure

Commandes d'initialisation

npm install -g @vue/cli
vue create mon-projet
cd mon-projet
npm run serve

Structure de composant

Exemple de composant simple

<template>
  <div class="application">
    <h1>{{ titre }}</h1>
  </div>
</template>

<script>
export default {
  designation: 'Application',
  donnees() {
    return { titre: 'Bienvenue dans Vue.js' }
  }
}
</script>

<style local>
.application {
  font-family: sans-serif;
}
</style>

Enregistrement des composants

Inscription globale

import Utilisateurs from './composants/Utilisateurs'
Vue.component('utilisateurs', Utilisateurs)

Enscription locale

import Utilisateurs from './composants/Utilisateurs'

export default {
  composants: { utilisateurs: Utilisateurs }
}

Propriétés et communication

Transmission de données parent-enfant

<!-- Parent -->
<utilisateurs :utilisateurs="liste"></utilisateurs>

<script>
export default {
  donnees() {
    return {
      liste: [
        { nom: "Pierre", role: "Développeur" },
        { nom: "Marie", role: "Designer" }
      ]
    }
  }
}
</script>

<!-- Composant enfant -->
<script>
export default {
  proprietes: {
    utilisateurs: {
      type: Array,
      requis: true
    }
  }
}
</script>

Gestion des événements

<!-- Composant émetteur -->
<template>
  <div @click="propagerModification">
    {{ texte }}
  </div>
</template>

<script>
export default {
  methodes: {
    propagerModification() {
      this.$emit("modificationTitre", "Nouveau titre")
    }
  }
}
</script>

<!-- Composant récepteur -->
<template>
  <composant-emetteur @modificationTitre="modifierTitre($event)"></composant-emetteur>
</template>

Gestionnaire d'état avec Vuex

Structure de base du store

const magasin = new Vuex.Store({
  etat: {
    produits: [
      { designation: "Ordinateur", prix: 1200 },
      { designation: "Smartphone", prix: 800 }
    ]
  },
  mutations: {
    reduirePrix: etat => {
      etat.produits.forEach(p => p.prix -= 100)
    }
  },
  actions: {
    appliquerReduction: (contexte, valeur) => {
      setTimeout(() => {
        contexte.commit('reduirePrix', valeur)
      }, 2000)
    }
  },
  getters: {
    produitsPromo: etat => {
      return etat.produits.filter(p => p.prix < 1000)
    }
  }
})

Utilisation dans les composants

export default {
  calcule: {
    articles() {
      return this.$store.etat.produits
    },
    ...Vuex.mapGetters(['produitsPromo'])
  },
  methodes: {
    ...Vuex.mapActions(['appliquerReduction'])
  }
}

Routage avancé

Configuration des routes

const itineraire = new VueRouter({
  mode: 'histoire',
  routes: [
    { chemin: '/', composant: Accueil },
    { chemin: '/a-propos', composant: APropos },
    { chemin: '*', redirect: '/' }
  ]
})

Navigation programmable

methodes: {
  naviguer() {
    this.$routeur.push({ nom: 'accueilLien' })
    this.$routeur.replace('/menu')
  }
}

Requêtes réseau

Exemple avec Axios

import axios from 'axios'

export default {
  cree: function() {
    axios.post('/api/utilisateurs', { credential })
      .then(reponse => console.log(reponse.donnees))
  }
}

Optimisation du cycle de vie

  • beforeCreate: pré-initialisation du composant
  • created: liaison des propriétés terminée
  • mounted: insertion dans le DOM complète
  • updated: mise à jour du composant appliquée
  • beforeDestroy: pré-destruction du composant

Étiquettes: Vue.js Vue CLI Vue Router Vuex axios

Publié le 9 octobre à 21h56