Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Introducción a Vue.js
Search
Andrés Santibáñez
February 08, 2018
Programming
0
35
Introducción a Vue.js
Qué es Vue.js, sus principios, filosofía y cómo empezamos a utilizarlo en nuestras aplicaciones.
Andrés Santibáñez
February 08, 2018
Tweet
Share
More Decks by Andrés Santibáñez
See All by Andrés Santibáñez
Conociendo Android
asantibanez
0
44
Other Decks in Programming
See All in Programming
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
460
Claude Codeと2つの巻き戻し戦略 / Two Rewind Strategies with Claude Code
fruitriin
0
130
AtCoder Conference 2025
shindannin
0
1.1k
Raku Raku Notion 20260128
hareyakayuruyaka
0
330
AIエージェントのキホンから学ぶ「エージェンティックコーディング」実践入門
masahiro_nishimi
5
470
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
200
CSC307 Lecture 04
javiergs
PRO
0
660
MUSUBIXとは
nahisaho
0
140
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
200
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
690
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
590
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
110
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
590
A designer walks into a library…
pauljervisheath
210
24k
The untapped power of vector embeddings
frankvandijk
1
1.6k
Navigating Team Friction
lara
192
16k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
57
50k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
New Earth Scene 8
popppiees
1
1.5k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
66
Context Engineering - Making Every Token Count
addyosmani
9
660
Transcript
Introducción a Vue.js Andrés Santibáñez Meetup Frontend Dev Guayaquil Febrero
8, 2018
¿Qué es Vue.js? • Framework Javascript para desarrollo de aplicaciones
frontend. • [Permite el] “Desarrollo de Interfaces de Usuario”
¿Qué es Vue.js? Permite la crear páginas y apps web
dinámicas. https://vuejs.org/v2/examples/todomvc.html
¿Qué es Vue.js? Centrado en Componentes
¿Qué es Vue.js? Adopción incremental
¿Qué es Vue.js? Adopción incremental Empezar por componentes.
¿Qué es Vue.js? Adopción incremental Empezar por componentes. SPA pequeños
y grandes.
¿Qué es Vue.js? • Utiliza HTML, CSS y JS
¿Qué es Vue.js? • Utiliza HTML, CSS y JS •
Permite crear nuevos tags <html> <head> </head> <body> <app> <navbar></navbar> <div class="content"> <sidebar></sidebar> <dashboard></dashboard> </div> </app> </body> </html>
¿Qué es Vue.js? • Utiliza HTML, CSS y JS •
Permite crear nuevos tags <html> <head> </head> <body> <app> <navbar></navbar> <div class="content"> <sidebar></sidebar> <dashboard></dashboard> </div> </app> </body> </html>
¿Por qué usar Vue.js?
¿Por qué usar Vue.js? • Es un framework más. Existen
similares.
¿Por qué usar Vue.js? • “Para gustos, hay colores” •
@asantibanez: simplicidad, rapidez de implementación. • No hay que aprender otros lenguajes • JSX: React • TypeScript: Angular
Historia de Vue.js
Historia de Vue.js • Evan You. Creador de Vue.js •
Google, Meteor • Trabajó con AngularJs • Decidió extraer filosofías de Angular y crear un nuevo framework • Lanzamiento: Febrero 2014 • Exposición Hacker News • 4 años
Historia de Vue.js • 83K estrellas en Github • 5K
menos que React • Open source • Patreon: $ 9,800
Historia de Vue.js • Última Version: 2.5.13 • Versiones con
nombres de anime • Level E • Dragon Ball • Ghost in the Shell
Conceptos Clave de Vue.js
Conceptos Clave Interfaces Interactivas a través de Componentes <create-todo-form></create-todo-form> <todos-list>
<todo-item></todo-item> <todo-item></todo-item> <todo-item></todo-item> </todos-list>
Conceptos Clave Interfaces Interactivas a través de Componentes <create-todo-form></create-todo-form> <todos-list>
<todo-item></todo-item> <todo-item></todo-item> <todo-item></todo-item> </todos-list>
Conceptos Clave Interfaces Interactivas a través de Componentes <create-todo-form></create-todo-form> <todos-list>
<todo-item></todo-item> <todo-item></todo-item> <todo-item></todo-item> </todos-list>
Conceptos Clave Interfaces Interactivas a través de Componentes <create-todo-form></create-todo-form> <todos-list>
<todo-item></todo-item> <todo-item></todo-item> <todo-item></todo-item> </todos-list>
Conceptos Clave Enfocado en el Estado de los Componentes
Conceptos Clave Enfocado en el Estado de los Componentes data()
{ return { email: '', password: '', isWorking: false } }
Conceptos Clave Enfocado en el Estado de los Componentes data()
{ return { email: '', password: '', isWorking: false } }
Conceptos Clave Reactivo / Orientado a Eventos data() { return
{ isChecked: false } }, computed: { checkedMessage() { return this.isChecked ? "Checked :D" : "NOT Checked :(" } }
Conceptos Clave Reactivo / Orientado a Eventos data() { return
{ isChecked: false } }, computed: { checkedMessage() { return this.isChecked ? "Checked :D" : "NOT Checked :(" } }
¿Cómo empezar?
Instalación de Vue.js
Instalación de Vue.js Opción A: Incluir un script en nuestra
página web <script src="/js/vue.js"></script>
Instalación de Vue.js Opción A: Incluir un script en nuestra
página web <script src="/js/vue.js"></script> npm install vue Opción B: npm
Instalación de Vue.js Opción A: Incluir un script en nuestra
página web <script src="/js/vue.js"></script> npm install vue Opción B: npm npm install —-global vue-cli vue init webpack [project-name] cd [project-name] npm install npm run dev Opción C: vue-cli
Utilizando Vue.js
Utilizando Vue.js <div id="app"></div>
Utilizando Vue.js <div id="app"></div> <script> new Vue({ // }).$mount('#app') </script>
Utilizando Vue.js <div id="app"></div> <script> new Vue({ // }).$mount('#app') </script>
Componentes en Vue.js
Componentes en Vue.js <div id="app"> <hello></hello> </div> <script> Vue.component('hello', {
template: `<div> {{ message }} </div>`, data() { return { message: 'Hello Frontend Dev Guayaquil!' } } }) new Vue({ // }).$mount(‘#app') </script>
Componentes en Vue.js <div id="app"> <hello></hello> </div> <script> Vue.component('hello', {
template: `<div> {{ message }} </div>`, data() { return { message: 'Hello Frontend Dev Guayaquil!' } } }) new Vue({ // }).$mount('#app') </script>
Componentes en Vue.js <div id="app"> <hello></hello> </div> <script> Vue.component('hello', {
template: `<div> {{ message }} </div>`, data() { return { message: 'Hello Frontend Dev Guayaquil!' } } }) new Vue({ // }).$mount('#app') </script>
Componentes en Vue.js <div id="app"> <hello></hello> <hello></hello> <hello></hello> </div> <script>
Vue.component('hello', { template: `<div> {{ message }} </div>`, data() { return { message: 'Hello Frontend Dev Guayaquil!' } } }) new Vue({ // }).$mount('#app') </script>
Single File Components • Archivos .vue
Single File Components • Archivos .vue • Divididos en 3
secciones
Single File Components • Archivos .vue • Divididos en 3
secciones <template> <div class="text-white"> {{ message }} </div> </template> <script> export default { data() { return { message: 'Hello Fron } } } </script> <style> .text-white { color: #ffffff; } </style>
Single File Components • Archivos .vue • Divididos en 3
secciones <template> <div class="text-white"> {{ message }} </div> </template> <script> export default { data() { return { message: 'Hello Fron } } } </script> <style> .text-white { color: #ffffff; } </style>
Single File Components • Archivos .vue • Divididos en 3
secciones <template> <div class="text-white"> {{ message }} </div> </template> <script> export default { data() { return { message: 'Hello Fron } } } </script> <style> .text-white { color: #ffffff; } </style>
Vue.component('hello', { template: `<div> {{ message }} </div>`, data() {
return { message: 'Hello Frontend Dev Guayaquil!' } } })
Vue.component('hello', { template: `<div> {{ message }} </div>`, data() {
return { message: 'Hello Frontend Dev Guayaquil!' } } })
Vue.component('hello', require('./Hello.vue')) { template: `<div> {{ message }} </div>`, data()
{ return { message: 'Hello Frontend Dev Guayaquil!' } } })
Interfaces Dinámicas
Interfaces Dinámicas
Interfaces Dinámicas Uso de “directivas” en HTML
Interfaces Dinámicas Uso de “directivas” en HTML <input type="text" v-model="firstName"
/> <input type="text" v-model="lastName" /> <p> Your full name is {{ firstName }} {{ lastName }} </p> data() { return { firstName: '', lastName: '', } },
Interfaces Dinámicas Uso de “directivas” en HTML <input type="text" v-model="firstName"
/> <input type="text" v-model="lastName" /> <p> Your full name is {{ firstName }} {{ lastName }} </p> data() { return { firstName: '', lastName: '', } },
Interfaces Dinámicas Uso de “directivas” en HTML <input type="text" v-model="firstName"
/> <input type="text" v-model="lastName" /> <p> Your full name is {{ firstName }} {{ lastName }} </p> data() { return { firstName: '', lastName: '', } },
Interfaces Dinámicas Uso de “directivas” en HTML (2) <input placeholder="Email"
v-model="email" type="text" /> <div v-show="emailEmpty"> <p class="text-red"> Debe especificar un correo </p> </div> <input placeholder="Contraseña" v-model="password" type=“password" /> <div v-show="passwordEmpty"> <p class="text-red"> Debe especificar una contraseña </p> </div> data() { return { email: '', password: '' } }, computed: { emailEmpty() { return this.email.length === 0 }, passwordEmpty() { return this.password.length === 0 }, },
Interfaces Dinámicas Uso de “directivas” en HTML <input placeholder="Email" v-model="email"
type="text" /> <div v-show="emailEmpty"> <p class="text-red"> Debe especificar un correo </p> </div> <input placeholder="Contraseña" v-model="password" type=“password" /> <div v-show="passwordEmpty"> <p class="text-red"> Debe especificar una contraseña </p> </div> data() { return { email: '', password: '' } }, computed: { emailEmpty() { return this.email.length === 0 }, passwordEmpty() { return this.password.length === 0 }, },
Interfaces Dinámicas Uso de “directivas” en HTML <input placeholder="Email" v-model="email"
type="text" /> <div v-show="emailEmpty"> <p class="text-red"> Debe especificar un correo </p> </div> <input placeholder="Contraseña" v-model="password" type=“password" /> <div v-show="passwordEmpty"> <p class="text-red"> Debe especificar una contraseña </p> </div> data() { return { email: '', password: '' } }, computed: { emailEmpty() { return this.email.length === 0 }, passwordEmpty() { return this.password.length === 0 }, },
Interfaces Dinámicas Uso de “directivas” en HTML <input placeholder="Email" v-model="email"
type="text" /> <div v-show="emailEmpty"> <p class="text-red"> Debe especificar un correo </p> </div> <input placeholder="Contraseña" v-model="password" type=“password" /> <div v-show="passwordEmpty"> <p class="text-red"> Debe especificar una contraseña </p> </div> data() { return { email: '', password: '' } }, computed: { emailEmpty() { return this.email.length === 0 }, passwordEmpty() { return this.password.length === 0 }, },
Algunas Directivas • v-model: data binding • v-show: muestra/esconde bloque
• v-for: renderizado de listas • v-if: bloque condicional • v-on: comunicación a través de eventos
Demo 2 ejemplos
Compose Tweet
Star Wars Characters