SlideShare a Scribd company logo
1 of 22
Download to read offline
SPA com VueJS
Fabio Fogliarini Brolesi <@brolesi>
Quem sou?
● Matemático pela UNICAMP
● Desenvolvedor na CI&T
● Tenho algumas certificações ;)
Agenda
● O que é o VueJS
● Características
● Uma SPA
● Q&A
VueJS
VueJS
● tl; dr: Vue é um framework para desenvolvimento de interfaces.
● Ele pode ser incrementado utilizando-se outras bibliotecas acopladas a
ele, para criação de interfaces e Single Page Applications (SPA)
● É possível criar aplicações do zero ou utilizando o CLI (command line
interface) para um boilerplate estruturado mais rapidamente
VueJS
● O uso das variáveis dentro do DOM é feito a partir de declarações simples
<div id="app">
{{ message }}
</div>
var app = new Vue({
el: '#app',
data: {
message: 'Olá Vue!'
}
})
VueJS - características
VueJS - componentes
● É possível modularizar a sua aplicação com o uso de componentes. Cada
pedaço da aplicação é um componente, que se encerra nele mesmo
(autocontido) e que pode ser reutilizado. Podemos então pensar numa
aplicação como sendo uma árvore de componentes.
VueJS - componentes: relacionamento
● Se por um lado componentes pai e filho precisam se comunicar de forma
clara, por outro lado é necessário existir um desacoplamento para que
eles sejam reutilizáveis.
● No caso do Vue, ele utiliza propriedades para baixo e eventos para cima.
VueJS - componentes: relacionamento do pai para o filho
● O one way data flow do Vue faz com que, quando o pai for atualizado, o
filho também seja; o contrário não é verdade, pois o filho poderia mudar o
valor do pai de maneira incorreta. A tentativa de atualizar uma propriedade
do filho será avisada no console.
● Para que o componente filho possa manipular os dados enviados via
propriedade, as alternativas são montar variáveis no filho que recebam o
valor da propriedade
VueJS - componentes: relacionamento do pai para o filho
● Para que as informações do componente pai sejam passadas para o filho,
utilizamos o props (entendido no Vue como propriedade do elemento
filho)
<child message="hello!"></child>
Vue.component('child', {
// declara as propriedades
props: ['message'],
// assim como os dados, a propriedade pode ser usada dentro de templates
// e também se torna disponível na instância como this.message
template: '<span>{{ message }}</span>'
})
VueJS - componentes: relacionamento do pai para o filho
● Propriedades dinâmicas podem ser referenciadas no template com o
atalho :<nome_da_propriedade>="<valor>"
<child :message="myMessage"></child>
VueJS - componentes: relacionamento do filho para o pai
● No caso de o filho ter de enviar informações para o pai, utilizamos então
eventos (o evento v-on:<nome>)
VueJS - componentes: relacionamento do filho para o pai
<div id="counter-event-example">
<p>{{ total }}</p>
<button-counter v-on:increment="incrementTotal"></button-counter>
<button-counter v-on:increment="incrementTotal"></button-counter>
</div>
Vue.component('button-counter', {
template: '<button v-on:click="incrementCounter">{{
counter }}</button>',
data: function () {
return {
counter: 0
}
},
methods: {
incrementCounter: function () {
this.counter += 1
this.$emit('increment')
}
},
})
new Vue({
el: '#counter-event-example',
data: {
total: 0
},
methods: {
incrementTotal: function () {
this.total += 1
}
}
})
VueJS - uma SPA
VueJS - uma SPA: bootstrap
● Vamos utilizar o CLI do VueJS para montar a SPA:
● Também criamos um mock JSON com json-server:
$ vue init webpack simple-crud
$ cd simple-crud
$ npm install
$ npm run dev
$ mkdir mock
$ cd mock
$ npm install -g json-server
$ json-server --watch db.json
VueJS - uma SPA: bootstrap e estrutura com o webpack
● A estrutura de pastas ficará conforme a figura ao lado:
VueJS - uma SPA: adicionando bibliotecas extenas
● Para este exemplo, vamos precisar de duas bibliotecas externas: axios e
momentjs
● O arquivo package.json será atualizado automaticamente:
$ npm install --save-dev axios
$ npm install --save-dev momentjs
"devDependencies": {
"autoprefixer": "^7.1.2",
"axios": "^0.17.0",
[...]
"momentjs": "^2.0.0",
[...]
},
VueJS - uma SPA: alterando o proxy
● Quando levantamos o servidor para a aplicação, ele fica na porta 8080. Já
o json-server inicia na porta 3000. Para que o navegador possa acessar o
servidor de mock, precisamos realizar uma alteração no arquivo
config/index.js para criar um proxy entre os servidores:
proxyTable: {
'/api/': {
target: 'http://localhost:3000/',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
},
VueJS - uma SPA: um arquivo típico
<template>
<div id="add">
<h1>Add</h1>
<form-input @dataSaved="displayInfo" />
</div>
</template>
<script>
import FormInput from '@/components/common/FormInput'
export default {
name: 'add',
components: {
FormInput
},
methods: {
displayInfo (i) {
this.$router.push('/')
}
}
}
</script>
<style scoped>
</style>
Dúvidas?
Obrigado
Fabio Fogliarini Brolesi <@brolesi>
https://github.com/brolesi/gdg-campinas-vuejs

More Related Content

What's hot

Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
Bruno Grange
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Vinicius Reis
 
CakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no WindowsCakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no Windows
Emerson Soares
 

What's hot (20)

Tutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e UsoTutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e Uso
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScript
 
Introdução ao DotNetNuke
Introdução ao DotNetNukeIntrodução ao DotNetNuke
Introdução ao DotNetNuke
 
ANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDA
ANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDAANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDA
ANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDA
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
 
Spa com angular js flisol 2015 - aquidauana ms
Spa com angular js   flisol 2015 - aquidauana msSpa com angular js   flisol 2015 - aquidauana ms
Spa com angular js flisol 2015 - aquidauana ms
 
Web Offline
Web OfflineWeb Offline
Web Offline
 
Java Web Fácil com VRaptor
Java Web Fácil com VRaptorJava Web Fácil com VRaptor
Java Web Fácil com VRaptor
 
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
 
Desenvolvimento de aplicações mobile com bootstrap, cordova e vue.js
Desenvolvimento de aplicações mobile com bootstrap, cordova e vue.jsDesenvolvimento de aplicações mobile com bootstrap, cordova e vue.js
Desenvolvimento de aplicações mobile com bootstrap, cordova e vue.js
 
Criando websites a jato com Django
Criando websites a jato com DjangoCriando websites a jato com Django
Criando websites a jato com Django
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
 
script.aculo.us
script.aculo.usscript.aculo.us
script.aculo.us
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
 
CakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no WindowsCakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no Windows
 

Similar to Spa com Vue.js

Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
elliando dias
 

Similar to Spa com Vue.js (20)

Vue.js - Framwork Progressivo
Vue.js - Framwork ProgressivoVue.js - Framwork Progressivo
Vue.js - Framwork Progressivo
 
Começando com Vue.js
Começando com Vue.jsComeçando com Vue.js
Começando com Vue.js
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 
Vue.js
Vue.jsVue.js
Vue.js
 
Primeiros passos no Vue.js
Primeiros passos no Vue.jsPrimeiros passos no Vue.js
Primeiros passos no Vue.js
 
Produtividade infinito e além com We.js
Produtividade infinito e além com We.jsProdutividade infinito e além com We.js
Produtividade infinito e além com We.js
 
Desenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endDesenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-end
 
Spring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutosSpring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutos
 
Hello vue
Hello vueHello vue
Hello vue
 
Workshop react + adonis.js
Workshop react + adonis.jsWorkshop react + adonis.js
Workshop react + adonis.js
 
Tutorial codeigniter
Tutorial codeigniterTutorial codeigniter
Tutorial codeigniter
 
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
 
Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
 
Introdução Vue JS
Introdução Vue JSIntrodução Vue JS
Introdução Vue JS
 
Framework web 02 - 2016
Framework web 02 - 2016Framework web 02 - 2016
Framework web 02 - 2016
 
Python 08
Python 08Python 08
Python 08
 
Gsp007
Gsp007Gsp007
Gsp007
 
Aula Ruby
Aula RubyAula Ruby
Aula Ruby
 
Php 05 Mvc
Php 05 MvcPhp 05 Mvc
Php 05 Mvc
 
Mvc delphi
Mvc delphiMvc delphi
Mvc delphi
 

Recently uploaded

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Recently uploaded (6)

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 

Spa com Vue.js

  • 1. SPA com VueJS Fabio Fogliarini Brolesi <@brolesi>
  • 2. Quem sou? ● Matemático pela UNICAMP ● Desenvolvedor na CI&T ● Tenho algumas certificações ;)
  • 3. Agenda ● O que é o VueJS ● Características ● Uma SPA ● Q&A
  • 5. VueJS ● tl; dr: Vue é um framework para desenvolvimento de interfaces. ● Ele pode ser incrementado utilizando-se outras bibliotecas acopladas a ele, para criação de interfaces e Single Page Applications (SPA) ● É possível criar aplicações do zero ou utilizando o CLI (command line interface) para um boilerplate estruturado mais rapidamente
  • 6. VueJS ● O uso das variáveis dentro do DOM é feito a partir de declarações simples <div id="app"> {{ message }} </div> var app = new Vue({ el: '#app', data: { message: 'Olá Vue!' } })
  • 8. VueJS - componentes ● É possível modularizar a sua aplicação com o uso de componentes. Cada pedaço da aplicação é um componente, que se encerra nele mesmo (autocontido) e que pode ser reutilizado. Podemos então pensar numa aplicação como sendo uma árvore de componentes.
  • 9. VueJS - componentes: relacionamento ● Se por um lado componentes pai e filho precisam se comunicar de forma clara, por outro lado é necessário existir um desacoplamento para que eles sejam reutilizáveis. ● No caso do Vue, ele utiliza propriedades para baixo e eventos para cima.
  • 10. VueJS - componentes: relacionamento do pai para o filho ● O one way data flow do Vue faz com que, quando o pai for atualizado, o filho também seja; o contrário não é verdade, pois o filho poderia mudar o valor do pai de maneira incorreta. A tentativa de atualizar uma propriedade do filho será avisada no console. ● Para que o componente filho possa manipular os dados enviados via propriedade, as alternativas são montar variáveis no filho que recebam o valor da propriedade
  • 11. VueJS - componentes: relacionamento do pai para o filho ● Para que as informações do componente pai sejam passadas para o filho, utilizamos o props (entendido no Vue como propriedade do elemento filho) <child message="hello!"></child> Vue.component('child', { // declara as propriedades props: ['message'], // assim como os dados, a propriedade pode ser usada dentro de templates // e também se torna disponível na instância como this.message template: '<span>{{ message }}</span>' })
  • 12. VueJS - componentes: relacionamento do pai para o filho ● Propriedades dinâmicas podem ser referenciadas no template com o atalho :<nome_da_propriedade>="<valor>" <child :message="myMessage"></child>
  • 13. VueJS - componentes: relacionamento do filho para o pai ● No caso de o filho ter de enviar informações para o pai, utilizamos então eventos (o evento v-on:<nome>)
  • 14. VueJS - componentes: relacionamento do filho para o pai <div id="counter-event-example"> <p>{{ total }}</p> <button-counter v-on:increment="incrementTotal"></button-counter> <button-counter v-on:increment="incrementTotal"></button-counter> </div> Vue.component('button-counter', { template: '<button v-on:click="incrementCounter">{{ counter }}</button>', data: function () { return { counter: 0 } }, methods: { incrementCounter: function () { this.counter += 1 this.$emit('increment') } }, }) new Vue({ el: '#counter-event-example', data: { total: 0 }, methods: { incrementTotal: function () { this.total += 1 } } })
  • 15. VueJS - uma SPA
  • 16. VueJS - uma SPA: bootstrap ● Vamos utilizar o CLI do VueJS para montar a SPA: ● Também criamos um mock JSON com json-server: $ vue init webpack simple-crud $ cd simple-crud $ npm install $ npm run dev $ mkdir mock $ cd mock $ npm install -g json-server $ json-server --watch db.json
  • 17. VueJS - uma SPA: bootstrap e estrutura com o webpack ● A estrutura de pastas ficará conforme a figura ao lado:
  • 18. VueJS - uma SPA: adicionando bibliotecas extenas ● Para este exemplo, vamos precisar de duas bibliotecas externas: axios e momentjs ● O arquivo package.json será atualizado automaticamente: $ npm install --save-dev axios $ npm install --save-dev momentjs "devDependencies": { "autoprefixer": "^7.1.2", "axios": "^0.17.0", [...] "momentjs": "^2.0.0", [...] },
  • 19. VueJS - uma SPA: alterando o proxy ● Quando levantamos o servidor para a aplicação, ele fica na porta 8080. Já o json-server inicia na porta 3000. Para que o navegador possa acessar o servidor de mock, precisamos realizar uma alteração no arquivo config/index.js para criar um proxy entre os servidores: proxyTable: { '/api/': { target: 'http://localhost:3000/', changeOrigin: true, pathRewrite: { '^/api': '' } } },
  • 20. VueJS - uma SPA: um arquivo típico <template> <div id="add"> <h1>Add</h1> <form-input @dataSaved="displayInfo" /> </div> </template> <script> import FormInput from '@/components/common/FormInput' export default { name: 'add', components: { FormInput }, methods: { displayInfo (i) { this.$router.push('/') } } } </script> <style scoped> </style>
  • 22. Obrigado Fabio Fogliarini Brolesi <@brolesi> https://github.com/brolesi/gdg-campinas-vuejs