SlideShare une entreprise Scribd logo
1  sur  46
Télécharger pour lire hors ligne
Geek Time - Mai 2017
Oussama BOUDHRI
Consultant - OLBATI
Introduction Vue.js
OLBATI - Geek Time - Mai 2016
PLAN
1- Introduction
2-Qu’est ce que vue.js
3- Pourquoi vue.js / Benchmark
4- Architecture & Lifecycle
5- Notions vue.js
6- Routing
7- Gestion des états avec vuex (Flux implemetation)
8- Conclusion
OLBATI - Geek Time - Mai 2016
Introduction
Si vous avez déjà été dans l’une des situations suivantes
- Des composants JS difficile à maintenir
- Avoir l’impression d’avoir installé une usine à gaz pour gérer la partie front de l’appli
- Trouver une difficulté d’apprentissage d’un framework et vous avez des délais serrés
Vue.js vous intéressera peut être !
OLBATI - Geek Time - Mai 2016
Qu’est ce que vue.js ?
Progressive javascript
framework
Créer des
applications SPA
Composantes
reactives
Virtual DOM
OLBATI - Geek Time - Mai 2016
Qu’est ce que vue.js ?
Reactive Interfaces
Declarative Rendering
Data Binding
Directives
Template Logic
Component & Nesting
Event Handling
Computed Properties
CSS Transitions & Animation
Custom Filters
OLBATI - Geek Time - Mai 2016
Qu’est ce que vue.js ?
Ecosystème :
- vuex (state management)
- vue-resource (HTTP requests)
- vue-router (routing)
- vue-cli (command line scaffolding)
- vue-developer (chrome devtools extension for debugging)
OLBATI - Geek Time - Mai 2016
Pourquoi vue.js / Benchmark
• Simple
Pas besoin de bibliothèques externes, ni de plugins
Code très lisible
Facilité d’apprentissage, une documentation très complète
Le créateur du framework dit qu’une journée d’apprentissage est généralement suffisante
pour écrire des applications non triviales
OLBATI - Geek Time - Mai 2016
Pourquoi vue.js / Benchmark
• Léger
L’application Vue 2.0 complète, compilateur inclus, ne fait que 23 Ko => plus léger que les
autres frameworks du marché.
OLBATI - Geek Time - Mai 2016
Pourquoi vue.js / Benchmark
• Performant et rapide
OLBATI - Geek Time - Mai 2016
Architecture & Lifecycle
OLBATI - Geek Time - Mai 2016
Architecture & Lifecycle
OLBATI - Geek Time - Mai 2016
Architecture & Lifecycle
Chaque instance de composant a son propre instance watcher
Quand le setter d’une dependance est déclenché
Une envoi de notification vers le watcher
Appel de re-render component
Mise à jour du virtual DOM
• Reactivité
OLBATI - Geek Time - Mai 2016
Notions : Component
Pour enregistrer un component, on utilise le syntaxe Vue.component(tagName, options)
Par exemple :
Utilisation du composant dans le template :
OLBATI - Geek Time - Mai 2016
Notions : Component
• Local registration
Rendre un composant disponible dans la portée d'une autre instance / composant
en l'enregistrant avec l'option component:
OLBATI - Geek Time - Mai 2016
Notions : Component
• Composing components
Le composant A peut utiliser le composant B dans son propre template
Le parent peut avoir besoin de transmettre les données au composant “child”
L'enfant peut avoir besoin d'informer le parent de ce qui s'est passé dans l’enfant
==> Il faut un bon découplage via des interfaces défini
==> Isolation des compostants ==> maintenabilité et reutilisabilité
OLBATI - Geek Time - Mai 2016
Notions : Component
• Composing components
Dans vue.js, la relation composant de type parent-child est defini par: props down, event up
- le composants parent passe les donnée pour le child a travers des props
- le composants child passe les données pour le parent a travers des events
OLBATI - Geek Time - Mai 2016
Notions : Component
• Props
Chaque instance de composant à sa propre “scope”
Cela signifie qu’on peut pas referencer directement les données d’un composant “parent”
à partir d’un composant “child”
Les données de type “up to down” sont passés à travers les props
OLBATI - Geek Time - Mai 2016
Notions : Component
• Props
recevoir les données à travers un attribut
OLBATI - Geek Time - Mai 2016
Notions : Component
• Props validation
OLBATI - Geek Time - Mai 2016
Notions : Component
• Custom Events
=> C’est pour cela on a besoin des custom events
Et comment on peut communiquer les données d’un élément composant de type “child”
vers un composant “parent” ?
OLBATI - Geek Time - Mai 2016
Notions : Component
• Custom Events
Chaque Vue instance implémente l’interface des events:
• Ecoute les évènements à travers $on(eventName)
• Envoyer les évènements à travers $emit(eventName)
OLBATI - Geek Time - Mai 2016
Notions: Conditionals
• v-if
• v-else-if
OLBATI - Geek Time - Mai 2016
Notions: Conditionals
• v-show
• v-show Vs v-if
v-show compile et rend toujours le contenu, il ajoute simplement le style “display:none” à l’élement
Il y a un cout de chargement initial au debut, mais le changement d’état affiché/non-affiché est rapide.
v-if c’est lazy, quand la condition = false rien n’est fait, sinon il compile et rend le contenu
Le basculement de la condition est couteux car il permet de créer et détruire des composants pour
chaque changement d’état.
OLBATI - Geek Time - Mai 2016
Notions: Filters
Vue possède commodément un certain nombre de filtres intégrés
Le symbole de pipe (|) est utilisé pour désigner un filtre tel que
OLBATI - Geek Time - Mai 2016
Notions: Filters
Les filtres peuvent être placés à la fin de la valeur d'une directive:
ou dans un syntaxe mustache
ou avec un chainage de plusieurs filtres
• Filter vue.js
OLBATI - Geek Time - Mai 2016
Notions: Filters
• Custom Filter
on peut enregistrer un filtre personnalisé avec la méthode globale Vue.filter(), en passant en
paramètre l’ID du filtre et la fonction de filtrage
Utilisation du filtre
Enregistrement du filtre
OLBATI - Geek Time - Mai 2016
Notions: Computed Properties
Mettre trop de logique dans les templates peut les rendre trop verbeux et difficiles à maintenir:
=> Difficulté d’inclure le message inversé dans votre modèle plus d'une fois.
C'est pourquoi pour toute logique complexe dans les templates, on utilise les “computed properties”
OLBATI - Geek Time - Mai 2016
Notions: Computed Properties
• Exemple
OLBATI - Geek Time - Mai 2016
Notions: Computed Properties
Les “computed properties” sont mises en cache en fonction de leurs dépendances. Ceci est
changé lorsque certaines de ses dépendances ont changé.
Cela signifie que tant que le message n'a pas changé, l'accès multiple à la propriété calculée
reversedMessage enverra immédiatement la valeur précédente sans devoir exécuter la fonction
à nouveau.
• Exemple
OLBATI - Geek Time - Mai 2016
Notions: Watchers
Lorsque on souhaite effectuer des opérations asynchrones ou coûteuses en réponse à la
modification des données. => On a besoin d’un watcher
Exemple:
OLBATI - Geek Time - Mai 2016
Notions: Watchers
Exemple:
OLBATI - Geek Time - Mai 2016
Notions: Class & style bindings
Nous pouvons transmettre à l’attribut v-bind:class un objet pour affecter dynamiquement
les classes css:
Contenu du model:
Rendu dans le DOM:
OLBATI - Geek Time - Mai 2016
Routing
Il est recommandé d'utiliser la bibliothèque vue-routeur pour gérer la navigation des pages:
HTML:
OLBATI - Geek Time - Mai 2016
Routing
Router javascript configuration:
OLBATI - Geek Time - Mai 2016
Gestion des états avec Vuex
Le concept de "one-way data flow” :
- State : Conteneur qui stocke l’état de l’application
- View : Afficher l’état et déclencher des actions
- Action : Contient les différents possibilités d’actions
qui peuvent être appliqué sur l’état
OLBATI - Geek Time - Mai 2016
Gestion des états avec Vuex
Si on a plusieurs composants qui partagent le même état
- Plusieurs Vue qui dependent de la même partie
qui stocke l’état
- Des actions qui ont besoin de changer l’état on même
temps => Mutation
OLBATI - Geek Time - Mai 2016
Gestion des états avec Vuex
Vuex pattern inspiré de Flux, Redux qui est une implémentation dédié pour vue.js
OLBATI - Geek Time - Mai 2016
Gestion des états avec Vuex
L’installation de vuex se fait avec la commande npm install vue —save
La création d’un simple store :
OLBATI - Geek Time - Mai 2016
Gestion des états avec Vuex
Recuperation de l’etat à partir d’un composant
Soit un composant qui va être appelé par un compostant parent :
Mais comment l’objet store a été passé ?
OLBATI - Geek Time - Mai 2016
Gestion des états avec Vuex
Recuperation de l’etat à partir d’un composant
La variable store est passé dans le composant parent afin de permettre au autre composant
qui l’appelle d’accéder á la variable Store
OLBATI - Geek Time - Mai 2016
Gestion des états avec Vuex
Declaration des Getters au sein d’un store
Getter call :
Getters :
OLBATI - Geek Time - Mai 2016
Gestion des états avec Vuex
Declaration des Actions au sein d’un store qui contient des opérations asynchrones
Actions :
Les Actions sont déclenché par la méthode store.dispatch
OLBATI - Geek Time - Mai 2016
Gestion des états avec Vuex
Mais si on veut faire l’incrementation, pourquoi on appelle pas directement
store.commit(‘increment’) ?
La raison :
- Les mutations doivent être synchrones
- Par contre, les actions ne sont pas synchrones
OLBATI - Geek Time - Mai 2016
Conclusion
Le point faible de Vue.js aux yeux des décideurs est qu’il reste un framework d’une « seule
personne »
OLBATI - Geek Time - Mai 2016
Conclusion
- Vue.js ne joue vraiment pas dans la cour d’Angular 2, mais vous n’avez pas toujours besoin d’une
telle puissance.
- La puissance d’Angular 2 est contrebalancée par la complexité et une courbe d’apprentissage
assez raide.
Vue 2 est sûrement un framework à considérer pour votre prochain projet.
OLBATI - Geek Time - Mai 2016
‹#›
Thanks!
Any questions?
@oboudhri
oussama.boudhri@olbati.com

Contenu connexe

Tendances

Débuter avec Rails::API & AngularJS
Débuter avec Rails::API & AngularJSDébuter avec Rails::API & AngularJS
Débuter avec Rails::API & AngularJSFrédéric DUPERIER
 
Hello AngularJS - Back to the future
Hello AngularJS - Back to the futureHello AngularJS - Back to the future
Hello AngularJS - Back to the futureOuadie LAHDIOUI
 
Introduction à Angularjs
Introduction à AngularjsIntroduction à Angularjs
Introduction à AngularjsRossi Oddet
 
Google : Prise en charge de l'Ajax et de l'Angular JS
Google : Prise en charge de l'Ajax et de l'Angular JSGoogle : Prise en charge de l'Ajax et de l'Angular JS
Google : Prise en charge de l'Ajax et de l'Angular JSPeak Ace
 
Geek Time Juin 2017 : Microservices Tracing
Geek Time Juin 2017 : Microservices TracingGeek Time Juin 2017 : Microservices Tracing
Geek Time Juin 2017 : Microservices TracingOLBATI
 
AngularJS - Présentation (french)
AngularJS - Présentation (french)AngularJS - Présentation (french)
AngularJS - Présentation (french)Yacine Rezgui
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile AppHabib MAALEM
 
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)Café Numérique Arlon
 
Node.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptKhalid Jebbari
 
ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)SOAT
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.jsTelecomValley
 
Utilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDBUtilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDB13p
 
Soirée 3T Soat - Asp.net MVC
Soirée 3T Soat - Asp.net MVCSoirée 3T Soat - Asp.net MVC
Soirée 3T Soat - Asp.net MVCSOAT
 
Geek Time Juin 2017 : GraphQL
Geek Time Juin 2017 : GraphQLGeek Time Juin 2017 : GraphQL
Geek Time Juin 2017 : GraphQLOLBATI
 
J'ai fait une app native en React Native
J'ai fait une app native en React NativeJ'ai fait une app native en React Native
J'ai fait une app native en React NativeCocoaHeads France
 

Tendances (20)

AngularJS
AngularJSAngularJS
AngularJS
 
Débuter avec Rails::API & AngularJS
Débuter avec Rails::API & AngularJSDébuter avec Rails::API & AngularJS
Débuter avec Rails::API & AngularJS
 
Node.js
Node.jsNode.js
Node.js
 
Hello AngularJS - Back to the future
Hello AngularJS - Back to the futureHello AngularJS - Back to the future
Hello AngularJS - Back to the future
 
Introduction à Angularjs
Introduction à AngularjsIntroduction à Angularjs
Introduction à Angularjs
 
Google : Prise en charge de l'Ajax et de l'Angular JS
Google : Prise en charge de l'Ajax et de l'Angular JSGoogle : Prise en charge de l'Ajax et de l'Angular JS
Google : Prise en charge de l'Ajax et de l'Angular JS
 
Geek Time Juin 2017 : Microservices Tracing
Geek Time Juin 2017 : Microservices TracingGeek Time Juin 2017 : Microservices Tracing
Geek Time Juin 2017 : Microservices Tracing
 
Introduction à Node.js
Introduction à Node.js Introduction à Node.js
Introduction à Node.js
 
AngularJS - Présentation (french)
AngularJS - Présentation (french)AngularJS - Présentation (french)
AngularJS - Présentation (french)
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile App
 
Introduction à Angular 2
Introduction à Angular 2Introduction à Angular 2
Introduction à Angular 2
 
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
 
Node.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascript
 
ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js
 
Utilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDBUtilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDB
 
Soirée 3T Soat - Asp.net MVC
Soirée 3T Soat - Asp.net MVCSoirée 3T Soat - Asp.net MVC
Soirée 3T Soat - Asp.net MVC
 
Geek Time Juin 2017 : GraphQL
Geek Time Juin 2017 : GraphQLGeek Time Juin 2017 : GraphQL
Geek Time Juin 2017 : GraphQL
 
jQuery vs AngularJS
jQuery vs AngularJS jQuery vs AngularJS
jQuery vs AngularJS
 
J'ai fait une app native en React Native
J'ai fait une app native en React NativeJ'ai fait une app native en React Native
J'ai fait une app native en React Native
 

Similaire à Geek Time Mai 2017 : Vue.js

Paul valery et les Web components
Paul valery et les Web componentsPaul valery et les Web components
Paul valery et les Web componentsFrancois ANDRE
 
Présentation de lancement de la SAE203 - MMI S2
Présentation de lancement de la SAE203 - MMI S2Présentation de lancement de la SAE203 - MMI S2
Présentation de lancement de la SAE203 - MMI S2JeanLucHusson
 
Developpement dun site_web_developpement
Developpement dun site_web_developpementDeveloppement dun site_web_developpement
Developpement dun site_web_developpementmosalah38
 
Developpement_dun_site_web_Developpement.pdf
Developpement_dun_site_web_Developpement.pdfDeveloppement_dun_site_web_Developpement.pdf
Developpement_dun_site_web_Developpement.pdfSofianeHassine2
 
20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You ReadyGeoffray Gruel
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyFrançois Petitit
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache MavenArnaud Héritier
 
yOS Montpellier - Piloter Office 365 grâce à powershell - Les indispensables
yOS Montpellier - Piloter Office 365 grâce à powershell - Les indispensablesyOS Montpellier - Piloter Office 365 grâce à powershell - Les indispensables
yOS Montpellier - Piloter Office 365 grâce à powershell - Les indispensablesBenoit Jester
 
Piloter Office 365 grâce à PowerShell - Les indispensables - Benoit Jester - ...
Piloter Office 365 grâce à PowerShell - Les indispensables - Benoit Jester - ...Piloter Office 365 grâce à PowerShell - Les indispensables - Benoit Jester - ...
Piloter Office 365 grâce à PowerShell - Les indispensables - Benoit Jester - ...Etienne Bailly
 
Geek Time December 2016 : Swagger II
Geek Time December 2016 : Swagger IIGeek Time December 2016 : Swagger II
Geek Time December 2016 : Swagger IIOLBATI
 
Tests Dinterface SWT
Tests Dinterface SWTTests Dinterface SWT
Tests Dinterface SWTEric Le Merdy
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptMichael Akbaraly
 
Introduction aux web components
Introduction aux web componentsIntroduction aux web components
Introduction aux web componentsFrancois ANDRE
 
HTML5, ARIA et accessibilité du Web: où en est-on?
HTML5, ARIA et accessibilité du Web: où en est-on?HTML5, ARIA et accessibilité du Web: où en est-on?
HTML5, ARIA et accessibilité du Web: où en est-on?Qelios
 
Formation JavaScript full-stack (JS, jQuery, Node.js...)
Formation JavaScript full-stack (JS, jQuery, Node.js...)Formation JavaScript full-stack (JS, jQuery, Node.js...)
Formation JavaScript full-stack (JS, jQuery, Node.js...)guicara
 
Cwin16 - Paris - dev ops
Cwin16 - Paris - dev opsCwin16 - Paris - dev ops
Cwin16 - Paris - dev opsCapgemini
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation MavenArnaud Héritier
 
GtugDakar AppEngine, Gwt
GtugDakar AppEngine, GwtGtugDakar AppEngine, Gwt
GtugDakar AppEngine, Gwthkairi
 
SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...
SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...
SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...SEO CAMP
 

Similaire à Geek Time Mai 2017 : Vue.js (20)

cours-gratuit.com--id-4422.pdf
cours-gratuit.com--id-4422.pdfcours-gratuit.com--id-4422.pdf
cours-gratuit.com--id-4422.pdf
 
Paul valery et les Web components
Paul valery et les Web componentsPaul valery et les Web components
Paul valery et les Web components
 
Présentation de lancement de la SAE203 - MMI S2
Présentation de lancement de la SAE203 - MMI S2Présentation de lancement de la SAE203 - MMI S2
Présentation de lancement de la SAE203 - MMI S2
 
Developpement dun site_web_developpement
Developpement dun site_web_developpementDeveloppement dun site_web_developpement
Developpement dun site_web_developpement
 
Developpement_dun_site_web_Developpement.pdf
Developpement_dun_site_web_Developpement.pdfDeveloppement_dun_site_web_Developpement.pdf
Developpement_dun_site_web_Developpement.pdf
 
20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacy
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
yOS Montpellier - Piloter Office 365 grâce à powershell - Les indispensables
yOS Montpellier - Piloter Office 365 grâce à powershell - Les indispensablesyOS Montpellier - Piloter Office 365 grâce à powershell - Les indispensables
yOS Montpellier - Piloter Office 365 grâce à powershell - Les indispensables
 
Piloter Office 365 grâce à PowerShell - Les indispensables - Benoit Jester - ...
Piloter Office 365 grâce à PowerShell - Les indispensables - Benoit Jester - ...Piloter Office 365 grâce à PowerShell - Les indispensables - Benoit Jester - ...
Piloter Office 365 grâce à PowerShell - Les indispensables - Benoit Jester - ...
 
Geek Time December 2016 : Swagger II
Geek Time December 2016 : Swagger IIGeek Time December 2016 : Swagger II
Geek Time December 2016 : Swagger II
 
Tests Dinterface SWT
Tests Dinterface SWTTests Dinterface SWT
Tests Dinterface SWT
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
 
Introduction aux web components
Introduction aux web componentsIntroduction aux web components
Introduction aux web components
 
HTML5, ARIA et accessibilité du Web: où en est-on?
HTML5, ARIA et accessibilité du Web: où en est-on?HTML5, ARIA et accessibilité du Web: où en est-on?
HTML5, ARIA et accessibilité du Web: où en est-on?
 
Formation JavaScript full-stack (JS, jQuery, Node.js...)
Formation JavaScript full-stack (JS, jQuery, Node.js...)Formation JavaScript full-stack (JS, jQuery, Node.js...)
Formation JavaScript full-stack (JS, jQuery, Node.js...)
 
Cwin16 - Paris - dev ops
Cwin16 - Paris - dev opsCwin16 - Paris - dev ops
Cwin16 - Paris - dev ops
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
 
GtugDakar AppEngine, Gwt
GtugDakar AppEngine, GwtGtugDakar AppEngine, Gwt
GtugDakar AppEngine, Gwt
 
SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...
SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...
SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...
 

Plus de OLBATI

Geek Time Juillet 2017 : TDD coté Front/JS
Geek Time Juillet 2017 : TDD coté Front/JSGeek Time Juillet 2017 : TDD coté Front/JS
Geek Time Juillet 2017 : TDD coté Front/JSOLBATI
 
Geek Time Mars 2017 : Les microservices
Geek Time Mars 2017 : Les microservicesGeek Time Mars 2017 : Les microservices
Geek Time Mars 2017 : Les microservicesOLBATI
 
Geek Time Janvier 2017 : Quiz Java
Geek Time Janvier 2017 : Quiz JavaGeek Time Janvier 2017 : Quiz Java
Geek Time Janvier 2017 : Quiz JavaOLBATI
 
Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8OLBATI
 
Geek Time Janvier 2017 : Angular 2
Geek Time Janvier 2017 : Angular 2Geek Time Janvier 2017 : Angular 2
Geek Time Janvier 2017 : Angular 2OLBATI
 
Geek Time December 2016 : Bitcoin/Blockchain
Geek Time December 2016 : Bitcoin/BlockchainGeek Time December 2016 : Bitcoin/Blockchain
Geek Time December 2016 : Bitcoin/BlockchainOLBATI
 
Geek Time December 2016 : Quiz Java 8
Geek Time December 2016 : Quiz Java 8Geek Time December 2016 : Quiz Java 8
Geek Time December 2016 : Quiz Java 8OLBATI
 
Geek Time Novembre 2016 : Quiz
Geek Time Novembre 2016 : QuizGeek Time Novembre 2016 : Quiz
Geek Time Novembre 2016 : QuizOLBATI
 
Geek Time Novembre 2016 : Neo4j
Geek Time Novembre 2016 : Neo4jGeek Time Novembre 2016 : Neo4j
Geek Time Novembre 2016 : Neo4jOLBATI
 
Geek Time Novembre 2016 : Cucumber
Geek Time Novembre 2016 : CucumberGeek Time Novembre 2016 : Cucumber
Geek Time Novembre 2016 : CucumberOLBATI
 
Geek Time October 2016 : Coding Dojo - Calisthenics Objects
Geek Time October 2016 : Coding Dojo - Calisthenics ObjectsGeek Time October 2016 : Coding Dojo - Calisthenics Objects
Geek Time October 2016 : Coding Dojo - Calisthenics ObjectsOLBATI
 
Geek Time September 2016 : Coding Dojo - Working on Legacy Code
Geek Time September 2016 : Coding Dojo - Working on Legacy CodeGeek Time September 2016 : Coding Dojo - Working on Legacy Code
Geek Time September 2016 : Coding Dojo - Working on Legacy CodeOLBATI
 
Geek Time September 2016 : JavaScript Linting Tools
Geek Time September 2016 : JavaScript Linting ToolsGeek Time September 2016 : JavaScript Linting Tools
Geek Time September 2016 : JavaScript Linting ToolsOLBATI
 
Geek Time Août 2016 : Docker
Geek Time Août 2016 : DockerGeek Time Août 2016 : Docker
Geek Time Août 2016 : DockerOLBATI
 
Geek Time Juin 2016 : Node.js
Geek Time Juin 2016 : Node.jsGeek Time Juin 2016 : Node.js
Geek Time Juin 2016 : Node.jsOLBATI
 
Geek Time Juin 2016 : React
Geek Time Juin 2016 : ReactGeek Time Juin 2016 : React
Geek Time Juin 2016 : ReactOLBATI
 

Plus de OLBATI (16)

Geek Time Juillet 2017 : TDD coté Front/JS
Geek Time Juillet 2017 : TDD coté Front/JSGeek Time Juillet 2017 : TDD coté Front/JS
Geek Time Juillet 2017 : TDD coté Front/JS
 
Geek Time Mars 2017 : Les microservices
Geek Time Mars 2017 : Les microservicesGeek Time Mars 2017 : Les microservices
Geek Time Mars 2017 : Les microservices
 
Geek Time Janvier 2017 : Quiz Java
Geek Time Janvier 2017 : Quiz JavaGeek Time Janvier 2017 : Quiz Java
Geek Time Janvier 2017 : Quiz Java
 
Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8
 
Geek Time Janvier 2017 : Angular 2
Geek Time Janvier 2017 : Angular 2Geek Time Janvier 2017 : Angular 2
Geek Time Janvier 2017 : Angular 2
 
Geek Time December 2016 : Bitcoin/Blockchain
Geek Time December 2016 : Bitcoin/BlockchainGeek Time December 2016 : Bitcoin/Blockchain
Geek Time December 2016 : Bitcoin/Blockchain
 
Geek Time December 2016 : Quiz Java 8
Geek Time December 2016 : Quiz Java 8Geek Time December 2016 : Quiz Java 8
Geek Time December 2016 : Quiz Java 8
 
Geek Time Novembre 2016 : Quiz
Geek Time Novembre 2016 : QuizGeek Time Novembre 2016 : Quiz
Geek Time Novembre 2016 : Quiz
 
Geek Time Novembre 2016 : Neo4j
Geek Time Novembre 2016 : Neo4jGeek Time Novembre 2016 : Neo4j
Geek Time Novembre 2016 : Neo4j
 
Geek Time Novembre 2016 : Cucumber
Geek Time Novembre 2016 : CucumberGeek Time Novembre 2016 : Cucumber
Geek Time Novembre 2016 : Cucumber
 
Geek Time October 2016 : Coding Dojo - Calisthenics Objects
Geek Time October 2016 : Coding Dojo - Calisthenics ObjectsGeek Time October 2016 : Coding Dojo - Calisthenics Objects
Geek Time October 2016 : Coding Dojo - Calisthenics Objects
 
Geek Time September 2016 : Coding Dojo - Working on Legacy Code
Geek Time September 2016 : Coding Dojo - Working on Legacy CodeGeek Time September 2016 : Coding Dojo - Working on Legacy Code
Geek Time September 2016 : Coding Dojo - Working on Legacy Code
 
Geek Time September 2016 : JavaScript Linting Tools
Geek Time September 2016 : JavaScript Linting ToolsGeek Time September 2016 : JavaScript Linting Tools
Geek Time September 2016 : JavaScript Linting Tools
 
Geek Time Août 2016 : Docker
Geek Time Août 2016 : DockerGeek Time Août 2016 : Docker
Geek Time Août 2016 : Docker
 
Geek Time Juin 2016 : Node.js
Geek Time Juin 2016 : Node.jsGeek Time Juin 2016 : Node.js
Geek Time Juin 2016 : Node.js
 
Geek Time Juin 2016 : React
Geek Time Juin 2016 : ReactGeek Time Juin 2016 : React
Geek Time Juin 2016 : React
 

Geek Time Mai 2017 : Vue.js

  • 1. Geek Time - Mai 2017 Oussama BOUDHRI Consultant - OLBATI Introduction Vue.js
  • 2. OLBATI - Geek Time - Mai 2016 PLAN 1- Introduction 2-Qu’est ce que vue.js 3- Pourquoi vue.js / Benchmark 4- Architecture & Lifecycle 5- Notions vue.js 6- Routing 7- Gestion des états avec vuex (Flux implemetation) 8- Conclusion
  • 3. OLBATI - Geek Time - Mai 2016 Introduction Si vous avez déjà été dans l’une des situations suivantes - Des composants JS difficile à maintenir - Avoir l’impression d’avoir installé une usine à gaz pour gérer la partie front de l’appli - Trouver une difficulté d’apprentissage d’un framework et vous avez des délais serrés Vue.js vous intéressera peut être !
  • 4. OLBATI - Geek Time - Mai 2016 Qu’est ce que vue.js ? Progressive javascript framework Créer des applications SPA Composantes reactives Virtual DOM
  • 5. OLBATI - Geek Time - Mai 2016 Qu’est ce que vue.js ? Reactive Interfaces Declarative Rendering Data Binding Directives Template Logic Component & Nesting Event Handling Computed Properties CSS Transitions & Animation Custom Filters
  • 6. OLBATI - Geek Time - Mai 2016 Qu’est ce que vue.js ? Ecosystème : - vuex (state management) - vue-resource (HTTP requests) - vue-router (routing) - vue-cli (command line scaffolding) - vue-developer (chrome devtools extension for debugging)
  • 7. OLBATI - Geek Time - Mai 2016 Pourquoi vue.js / Benchmark • Simple Pas besoin de bibliothèques externes, ni de plugins Code très lisible Facilité d’apprentissage, une documentation très complète Le créateur du framework dit qu’une journée d’apprentissage est généralement suffisante pour écrire des applications non triviales
  • 8. OLBATI - Geek Time - Mai 2016 Pourquoi vue.js / Benchmark • Léger L’application Vue 2.0 complète, compilateur inclus, ne fait que 23 Ko => plus léger que les autres frameworks du marché.
  • 9. OLBATI - Geek Time - Mai 2016 Pourquoi vue.js / Benchmark • Performant et rapide
  • 10. OLBATI - Geek Time - Mai 2016 Architecture & Lifecycle
  • 11. OLBATI - Geek Time - Mai 2016 Architecture & Lifecycle
  • 12. OLBATI - Geek Time - Mai 2016 Architecture & Lifecycle Chaque instance de composant a son propre instance watcher Quand le setter d’une dependance est déclenché Une envoi de notification vers le watcher Appel de re-render component Mise à jour du virtual DOM • Reactivité
  • 13. OLBATI - Geek Time - Mai 2016 Notions : Component Pour enregistrer un component, on utilise le syntaxe Vue.component(tagName, options) Par exemple : Utilisation du composant dans le template :
  • 14. OLBATI - Geek Time - Mai 2016 Notions : Component • Local registration Rendre un composant disponible dans la portée d'une autre instance / composant en l'enregistrant avec l'option component:
  • 15. OLBATI - Geek Time - Mai 2016 Notions : Component • Composing components Le composant A peut utiliser le composant B dans son propre template Le parent peut avoir besoin de transmettre les données au composant “child” L'enfant peut avoir besoin d'informer le parent de ce qui s'est passé dans l’enfant ==> Il faut un bon découplage via des interfaces défini ==> Isolation des compostants ==> maintenabilité et reutilisabilité
  • 16. OLBATI - Geek Time - Mai 2016 Notions : Component • Composing components Dans vue.js, la relation composant de type parent-child est defini par: props down, event up - le composants parent passe les donnée pour le child a travers des props - le composants child passe les données pour le parent a travers des events
  • 17. OLBATI - Geek Time - Mai 2016 Notions : Component • Props Chaque instance de composant à sa propre “scope” Cela signifie qu’on peut pas referencer directement les données d’un composant “parent” à partir d’un composant “child” Les données de type “up to down” sont passés à travers les props
  • 18. OLBATI - Geek Time - Mai 2016 Notions : Component • Props recevoir les données à travers un attribut
  • 19. OLBATI - Geek Time - Mai 2016 Notions : Component • Props validation
  • 20. OLBATI - Geek Time - Mai 2016 Notions : Component • Custom Events => C’est pour cela on a besoin des custom events Et comment on peut communiquer les données d’un élément composant de type “child” vers un composant “parent” ?
  • 21. OLBATI - Geek Time - Mai 2016 Notions : Component • Custom Events Chaque Vue instance implémente l’interface des events: • Ecoute les évènements à travers $on(eventName) • Envoyer les évènements à travers $emit(eventName)
  • 22. OLBATI - Geek Time - Mai 2016 Notions: Conditionals • v-if • v-else-if
  • 23. OLBATI - Geek Time - Mai 2016 Notions: Conditionals • v-show • v-show Vs v-if v-show compile et rend toujours le contenu, il ajoute simplement le style “display:none” à l’élement Il y a un cout de chargement initial au debut, mais le changement d’état affiché/non-affiché est rapide. v-if c’est lazy, quand la condition = false rien n’est fait, sinon il compile et rend le contenu Le basculement de la condition est couteux car il permet de créer et détruire des composants pour chaque changement d’état.
  • 24. OLBATI - Geek Time - Mai 2016 Notions: Filters Vue possède commodément un certain nombre de filtres intégrés Le symbole de pipe (|) est utilisé pour désigner un filtre tel que
  • 25. OLBATI - Geek Time - Mai 2016 Notions: Filters Les filtres peuvent être placés à la fin de la valeur d'une directive: ou dans un syntaxe mustache ou avec un chainage de plusieurs filtres • Filter vue.js
  • 26. OLBATI - Geek Time - Mai 2016 Notions: Filters • Custom Filter on peut enregistrer un filtre personnalisé avec la méthode globale Vue.filter(), en passant en paramètre l’ID du filtre et la fonction de filtrage Utilisation du filtre Enregistrement du filtre
  • 27. OLBATI - Geek Time - Mai 2016 Notions: Computed Properties Mettre trop de logique dans les templates peut les rendre trop verbeux et difficiles à maintenir: => Difficulté d’inclure le message inversé dans votre modèle plus d'une fois. C'est pourquoi pour toute logique complexe dans les templates, on utilise les “computed properties”
  • 28. OLBATI - Geek Time - Mai 2016 Notions: Computed Properties • Exemple
  • 29. OLBATI - Geek Time - Mai 2016 Notions: Computed Properties Les “computed properties” sont mises en cache en fonction de leurs dépendances. Ceci est changé lorsque certaines de ses dépendances ont changé. Cela signifie que tant que le message n'a pas changé, l'accès multiple à la propriété calculée reversedMessage enverra immédiatement la valeur précédente sans devoir exécuter la fonction à nouveau. • Exemple
  • 30. OLBATI - Geek Time - Mai 2016 Notions: Watchers Lorsque on souhaite effectuer des opérations asynchrones ou coûteuses en réponse à la modification des données. => On a besoin d’un watcher Exemple:
  • 31. OLBATI - Geek Time - Mai 2016 Notions: Watchers Exemple:
  • 32. OLBATI - Geek Time - Mai 2016 Notions: Class & style bindings Nous pouvons transmettre à l’attribut v-bind:class un objet pour affecter dynamiquement les classes css: Contenu du model: Rendu dans le DOM:
  • 33. OLBATI - Geek Time - Mai 2016 Routing Il est recommandé d'utiliser la bibliothèque vue-routeur pour gérer la navigation des pages: HTML:
  • 34. OLBATI - Geek Time - Mai 2016 Routing Router javascript configuration:
  • 35. OLBATI - Geek Time - Mai 2016 Gestion des états avec Vuex Le concept de "one-way data flow” : - State : Conteneur qui stocke l’état de l’application - View : Afficher l’état et déclencher des actions - Action : Contient les différents possibilités d’actions qui peuvent être appliqué sur l’état
  • 36. OLBATI - Geek Time - Mai 2016 Gestion des états avec Vuex Si on a plusieurs composants qui partagent le même état - Plusieurs Vue qui dependent de la même partie qui stocke l’état - Des actions qui ont besoin de changer l’état on même temps => Mutation
  • 37. OLBATI - Geek Time - Mai 2016 Gestion des états avec Vuex Vuex pattern inspiré de Flux, Redux qui est une implémentation dédié pour vue.js
  • 38. OLBATI - Geek Time - Mai 2016 Gestion des états avec Vuex L’installation de vuex se fait avec la commande npm install vue —save La création d’un simple store :
  • 39. OLBATI - Geek Time - Mai 2016 Gestion des états avec Vuex Recuperation de l’etat à partir d’un composant Soit un composant qui va être appelé par un compostant parent : Mais comment l’objet store a été passé ?
  • 40. OLBATI - Geek Time - Mai 2016 Gestion des états avec Vuex Recuperation de l’etat à partir d’un composant La variable store est passé dans le composant parent afin de permettre au autre composant qui l’appelle d’accéder á la variable Store
  • 41. OLBATI - Geek Time - Mai 2016 Gestion des états avec Vuex Declaration des Getters au sein d’un store Getter call : Getters :
  • 42. OLBATI - Geek Time - Mai 2016 Gestion des états avec Vuex Declaration des Actions au sein d’un store qui contient des opérations asynchrones Actions : Les Actions sont déclenché par la méthode store.dispatch
  • 43. OLBATI - Geek Time - Mai 2016 Gestion des états avec Vuex Mais si on veut faire l’incrementation, pourquoi on appelle pas directement store.commit(‘increment’) ? La raison : - Les mutations doivent être synchrones - Par contre, les actions ne sont pas synchrones
  • 44. OLBATI - Geek Time - Mai 2016 Conclusion Le point faible de Vue.js aux yeux des décideurs est qu’il reste un framework d’une « seule personne »
  • 45. OLBATI - Geek Time - Mai 2016 Conclusion - Vue.js ne joue vraiment pas dans la cour d’Angular 2, mais vous n’avez pas toujours besoin d’une telle puissance. - La puissance d’Angular 2 est contrebalancée par la complexité et une courbe d’apprentissage assez raide. Vue 2 est sûrement un framework à considérer pour votre prochain projet.
  • 46. OLBATI - Geek Time - Mai 2016 ‹#› Thanks! Any questions? @oboudhri oussama.boudhri@olbati.com