51
loading...
This website collects cookies to deliver better user experience
emmet.includeLanguages: {
'vue' : 'html',
'vue-html': 'html'
}
<html>
<head>
<title>Ma page Vue.js</title>
</head>
<body>
<div id="app">
{{ title }}
</div>
<script src="https://unpkg.com/vue@next"></script>
<script src="./app.js"></script>
</boby>
</html>
// Fonction qui permet d'initialiser Vue.js
Vue.createApp({
data() {
return {
title: "Hello Word Vue"
}
}
}).mount('#app')
// mount spécifie que l'application Vue s'affichera dans la div avec id="app"
// variable
{{ title }}
// expression
{{ title.toUpperCase() }}
<img v-bind:src="image_url" />
// ou syntaxe raccourcie
<img :src="image_url" />
<div v-once>
{{ title }}
</div>
<div v-html="title">
</div>
<input v-model="name" type="text" />
<div>
Nom : {{ name }}
</div>
<div v-if="montant > 100">
Livraison gratuite!
<div>
<div v-else-if="montant > 50">
Livraison 9.95$
</div>
<div v-else>
Livraison 19.95$
</div>
<div v-show="isError">
{{ errorMessage }}
</div>
<ul>
<li v-for="item in items" :key="item.id">
{{ item.name }}
</li>
</ul>
<input type="text" ref="name">
methods: {
handleClick() {
console.log(this.$refs.name)
this.$refs.name.classList.add('active')
this.$refs.name.focus()
}
}
<div class="text-2xl" :class="isAdmin ? 'text-red-500' : 'text-gray-500'">
Hello World
</div>
<div :class="{ 'text-red-500': isAdmin, 'text-gray-500': !isAdmin }">
Hello World
</div>
<div :style="{'margin-top': '10px', 'padding': '5px'">
Hello World
</div>
titleClass: {
'text-red-400': this.isAdmin,
'text-gray-500': !this.isAdmin
}
<div :class="titleClass">
Hello World
</div>
<template v-show="quantity === 0">
La quantité doit être supérieure à zéro
</template>
<button v-on:click="name = 'Mike'">Afficher message</button>
// ou syntaxe raccourcie
<button @click="name = 'Mike'">Afficher message</button>
<button v-on:keydown.enter="name = 'Mike'">Afficher message</button>
// ou syntaxe raccourcie
<button @click="name = 'Mike'">Afficher message</button>
<form v-on:submit.prevent="name = 'Mike'">
<input v-model="name" type="text" />
<button type="submit">Sauvegarde</button>
</form>
Vue.createApp({
data() {
return {
name: "Mike Taylor",
}
},
methods: {
resetName() {
this.name = ''
}
}
}).mount('#app')
<input v-model="name" type="text" />
<button @click="resetName" type="text">Effacer</button>
methods: {
resetName(newName) {
this.name = newName
}
}
<input v-model="name" type="text" />
<button @click="resetName('John')" type="text">Effacer</button>
methods: {
resetName(newName, e) {
this.name = newName
console.log(e.target.textContent)
}
}
<input v-model="name" type="text" />
<button @click="resetName('John', $event)" type="text">Effacer</button>
computed: {
recalculerTotal(items, taxes) {
return this.calculerTotal(items, taxes)
}
}
<button @click="recalculerTotal">Re-Calculer</button>
watch: {
title(newTitle, oldTitle) {
console.log(`Le titre ${oldTitle} a changé pour ${newTitle}`)
}
}
created() {
console.log('Mon instance est created')
}
const app = Vue.createApp({
data() {
return {
message: 'Un message'
}
},
methodes: {
deleteUser(userID) {
console.log(`User ${userID} deleted`)
}
}
)}
app.component('nav-bar', {
template: `
<div>
{{ title }}
...navigation bar code...
</div>
`,
props: {
title: {
type: String,
required: true,
default: 'Mon application'
}
},
methods: {
sendDelete() {
const userId = 10
this.$emit('delete', userId)
}
}
}
app.mount('#app')
<div>
<nav-bar title="Mon application" v-on:delete="deleteUser($event)" />
</div>
props: {
title: {
type: String,
required: true,
default: 'Mon application'
}
},
props: ['title'],
<div>
<nav-bar title="Mon application" />
</div>
methods: {
sendDelete() {
const userId = 10
this.$emit('delete', userId)
}
}
<div>
<nav-bar title="Mon app" v-on:delete="deleteUser" />
</div>
npm install -g @vue/cli
vue create my-app-name
cd my-app-name
npm run serve
vue add vue-router
vue add vuex
vue add tailwind
import { createApp } from "vue";
import App from "./App.vue";
createApp(App).mount("#app");
npm init @vitejs/app my-app-name --template vue
npm install
npm run dev
<template>
<img alt="Vue logo" src="./assets/logo.png" />
<HelloWorld msg="Hello Vue 3 + Vite" />
{{ message }}
</template>
<script>
import HelloWorld from './components/HelloWorld.vue'
export default {
components: {
HelloWorld
},
data() {
return {
message: 'Hello World'
}
},
}
</script>
<style scope >
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
text-align: center;
color: #2c3e50;
}
</style>
<template>
<HelloWorld msg="Hello Vue 3 + Vite" />
</template>
import HelloWorld from './components/HelloWorld.vue'
<custom-button>
Je peux ajouter du contenu...
Titre: {{ title }}
</custom-button>
<template>
<slot></slot>
</template>
<template>
<slot>Si rien n'est spécifié je vais m'afficher</slot>
</template>
<custom-button>
Je peux ajouter du contenu...
<template #title>
{{ title }}
</template>
</custom-button>
<template>
<slot></slot>
<slot name="title"></slot>
</template>
<template>
<slot name="title" satus="info"></slot>
</template>
<custom-button>
Je peux ajouter du contenu...
<template #title="titleProps">
{{ title }}
{{ titleProps.status }}
</template>
</custom-button>
<template>
<slot type="ajout"></slot>
<slot name="title" status="info"></slot>
</template>
<custom-button>
<template #default="defaultProps">
Je peux ajouter du contenu...
{{ defaultProps.type }}
</template>
<template #title="titleProps">
{{ title }}
{{ titleProps.status }}
</template>
</custom-button>
<custom-button #default="defaultProps">
Je peux ajouter du contenu...
{{ defaultProps.type }}
</custom-button>