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
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
590
並行開発のためのコードレビュー
miyukiw
0
280
AtCoder Conference 2025
shindannin
0
1.1k
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
980
CSC307 Lecture 07
javiergs
PRO
1
550
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
140
Raku Raku Notion 20260128
hareyakayuruyaka
0
330
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
3.9k
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.3k
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
650
AIエージェントのキホンから学ぶ「エージェンティックコーディング」実践入門
masahiro_nishimi
5
470
ぼくの開発環境2026
yuzneri
0
240
Featured
See All Featured
Fireside Chat
paigeccino
41
3.8k
How STYLIGHT went responsive
nonsquared
100
6k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
370
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
590
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Amusing Abliteration
ianozsvald
0
100
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3k
How GitHub (no longer) Works
holman
316
140k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Building AI with AI
inesmontani
PRO
1
700
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
130
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