Par Valentin Brosseau / @c4software
VueJS 2.0 ou VueJS 3.0 ?
Ici nous allons nous intéresser à la force de VueJS dans son ensemble.
Qui se passe ou se développe progressivement ou par étapes.
Progressive Web Apps
Bluffant n’est-ce pas ? (psst c’est du ReactJS)
Attention au support des navigateurs
Faire des PWA simplement (il y en a d'autres bien évidemment, en connaissez-vous ?)
Et pas ReactJS ou Angular…
Deux modes de fonctionnement
const app = Vue.createApp({
// Options
});
// Montage de l'application
app.mount('#app');
const app = Vue.createApp({
data() {
return { compteur: 1 };
},
mounted() {
console.log("Le compteur est : " + this.compteur);
},
methods: {
increment() {
this.compteur++;
},
},
});
// Là où l'application sera affichée
app.mount("#demo");
Les directives sont des attributs HTML propres à VueJS
@
)Code utilisable dans votre objet. « Votre code », accessible via le this
:
const app = Vue.createApp({
data() {
return { compteur: 1 };
},
methods: {
message() {
alert(`La valeur du compteur est ${this.compteur}`);
},
},
});
app.mount("#demo");
<button @click="message">Cliquez ici</button>
Exemple d'objet :
Vue.createApp({
data() {
return { compteur: 0 };
},
methods: {
message(message) {
alert(message);
},
},
}).mount("#demo");
<div id="demo">
<button @click="message('yolo')">Yolo</button>
<button v-on:click="compteur += 1"></button>
<p>Vous avez cliqué : {{compteur}}</p>
</div>
<div id="demo">
<p v-if="compteur > 10">Vous avez cliqué plus de 10 fois</p>
<p v-else>Vous avez cliqué moins de 10 fois</p>
</div>
<ul>
<li v-for="(item, index) in items">{{item.message}}</li>
</ul>
data: {
items: [
{ message: "Message 1" },
{ message: "Message 2" },
{ message: "Message 3" },
];
}
<!-- Arrêt de la propagation de l’évènement -->
<a @click.stop="clickEvent"></a>
<!--
Le « submit » est intercepté, et le navigateur ne rechargera plus la page
-->
<form @submit.prevent="onSubmit"></form>
<!-- Il est possible de les chainer -->
<a @click.stop.prevent="clickMessage"></a>
<!-- Également disponible tab, delete, esc, space, ... -->
<input @keyup.enter="submit" />
Observation des « Data », pour réagir en code aux modifications de l'état de votre objet.
Vue.createApp({
data() {
return { compteur: 1 };
},
watch: {
compteur(newVal) {
console.log(`La valeur est maintenant de ${newVal}`);
},
},
}).mount("#demo");
VueJS c'est simple et très complet. La suite en pratique et sur le site de VueJS
On est vraiment loin d’une page Web dans la conception
Un composant ce n'est pas que du JavaScript.
<script setup>
import { ref } from 'vue'
// Déclaration d'une variable observée
const count = ref(0);
</script>
<template>
<button @click="count++">Count is: {{ count }}</button>
</template>
<style scoped>
button {
font-weight: bold;
}
</style>
C'est possible grâce à la puissance de Vite, Webpack ou Rollup.
C'est deux éléments importants
Le Bundleur est l'outil qui va assembler les modules JavaScript. Qui nous permet de créer des composants en n'indiquant que le fichier « .vue ».
Version « librairie »
Vue.createApp({
data() {
return { demo: 1 };
},
}).mount("#demo");
Version « composant »
<template>…</template>
<script setup>
import { ref } from 'vue'
// Déclaration d'une variable observée
const count = ref(0);
</script>
npm create vite@latest
C’est toujours mieux en vrai…
$ npm run dev
… Lancement du serveur intégré …
npm install vue-router@4
)npm install pinia
)data()
(à l'ancienne)setup()
(nouveau) (ou via <script setup>
)setup: () => {
// Déclaration d'une variable « observé » de type Int
const count = ref(0);
// Déclaration d'une seconde variable « observé » de type String
const title = ref("Ceci est un titre");
// Ne pas oublier de retourner les observations afin que VueJS réagisse au changement des variables en question.
return { count, title };
};
En utilisant vueuse
import { useMouse, usePreferredDark, useLocalStorage } from '@vueuse/core'
export default {
setup() {
// tracks mouse position
const { x, y } = useMouse()
// is user prefers dark theme
const isDark = usePreferredDark()
// persist state in localStorage
const store = useLocalStorage(
'my-storage',
{
name: 'Apple',
color: 'red',
},
)
return { x, y, isDark, store }
}
})
npm create vite@latest
C'est à vous de choisir, moi j'utilise de préférence VueJS 3. Et VueJS 2 pour les projets « plus anciens ».
(Il doit y en avoir énormément)