├── .gitignore ├── assets ├── vue2.png ├── Vuetify │ ├── he4rt-logo.png │ ├── O que e Vuetify │ │ ├── project_plugin.png │ │ ├── project_vue_cli.png │ │ ├── project_vuetify.png │ │ ├── project_dashboard.png │ │ ├── project_helloworld.png │ │ ├── create_project_details.png │ │ ├── create_project_features.png │ │ ├── create_project_preset.png │ │ └── create_project_dependencies.png │ └── Componentes │ │ ├── component_header_final.png │ │ ├── project_landing_page.png │ │ └── component_header_location.png ├── Next │ └── Vuetelemetry │ │ └── util.png ├── Conceitos │ ├── Diretivas │ │ └── vfor1.png │ ├── LifeCycleHooks │ │ └── lifecyclehooks.png │ └── Transições │ │ └── simple_transition.png ├── Vue Router │ ├── Navegação │ │ └── login-page.png │ ├── Rotas Filhas │ │ └── dashboard-home.png │ └── Iniciando com Vue Router │ │ └── router-structure.png ├── Iniciando com Vue │ ├── VueCLI │ │ ├── vuecreate.png │ │ ├── vuelocalhost.png │ │ └── vueproject.png │ └── Componentização │ │ └── componentization.png ├── Vuex │ └── Gerenciamento de Estado │ │ ├── vuex.png │ │ └── vuex_structure.png └── Testes e Storybook │ ├── Cypress no Vue │ ├── e2e.png │ └── e2e-tests.png │ └── Storybook │ └── storybook.png ├── docs ├── .vuepress │ ├── public │ │ └── favicon.ico │ └── config.js ├── tutorial │ ├── 9 - Next │ │ ├── 11 - Obrigado.md │ │ ├── 9 - Vuetelemetry.md │ │ ├── 7 - Vite.md │ │ ├── 10 - IonicVue.md │ │ ├── 4 - Suspense.md │ │ ├── 6 - Typescript.md │ │ ├── 2 - Ecossistema.md │ │ ├── 5 - JSX.md │ │ ├── 8 - Pinia.md │ │ ├── 3 - Hooks.md │ │ └── 1 - API.md │ ├── 8 - Ecossistema Vue │ │ ├── 7 - Obrigado.md │ │ ├── 2 - Gridsome.md │ │ ├── 3 - VueNative.md │ │ ├── 5 - Quasar.md │ │ ├── 6 - Vuepress.md │ │ ├── 1 - Nuxt.md │ │ └── 4 - VueElectron.md │ ├── 6-Bibliotecas Adicionais │ │ ├── 6-VuePropertyDecorator.md │ │ ├── 9-AntDesignVue.md │ │ ├── 5-VueResource.md │ │ ├── 4-VueDarkMode.md │ │ ├── 7-VueFontAwesome.md │ │ ├── 2-Vuei18n.md │ │ ├── 3-VueAWN.md │ │ ├── 8-VuexClassModules.md │ │ └── 1-Vuelidate.md │ ├── 1-Iniciando com Vue │ │ ├── 0-Antes de começar.md │ │ ├── 5-Componentização.md │ │ ├── 2-VueCLI.md │ │ ├── 1-O que e Vue.md │ │ ├── 3-Estrutura do Projeto.md │ │ └── 4-Fluxo e Props.md │ ├── 3-Vuetify │ │ ├── 4-Considerações.md │ │ ├── 3-Customização.md │ │ ├── 1-Iniciando com Vuetify.md │ │ └── 2-Criando Componentes.md │ ├── 7-Testes e Storybook │ │ ├── 3-Storybook.md │ │ ├── 2-Cypress no Vue.md │ │ ├── 1-Jest no Vue.md │ │ └── 4-Vitest.md │ ├── 2-Conceitos │ │ ├── 14-Considerações.md │ │ ├── 11-Pre-Processadores.md │ │ ├── 9-Keep Alive.md │ │ ├── 5-Instância Vue.md │ │ ├── 4-CSS.md │ │ ├── 7-BusEvent.md │ │ ├── 10-Mixins.md │ │ ├── 6-LifeCycleHooks.md │ │ ├── 3-Computed e Watch.md │ │ ├── 8-Transições.md │ │ ├── 2-Diretivas.md │ │ ├── 1-Data, Methods e Modificadores.md │ │ └── 13-SCSS-Avançado.md │ ├── 5-Vuex │ │ ├── 6-Getters.md │ │ ├── 4-Actions.md │ │ ├── 2-Iniciando com Vuex.md │ │ ├── 7-Estrutura.md │ │ ├── 8-Modules.md │ │ ├── 5-Mutations.md │ │ ├── 1-Gerenciamento de Estado.md │ │ └── 3-State.md │ └── 4-Vue Router │ │ ├── 5-Transições no VueRouter.md │ │ ├── 1-Iniciando com Vue Router.md │ │ ├── 4-Guardas de Rota.md │ │ ├── 3-Rotas Filhas.md │ │ └── 2-Navegação.md └── README.md ├── .editorconfig ├── generi.config.ts ├── package.json ├── REFERENCES.md ├── LICENSE ├── .github └── workflows │ └── action.yml └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | *.vue 3 | dist 4 | node_modules -------------------------------------------------------------------------------- /assets/vue2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/vue2.png -------------------------------------------------------------------------------- /assets/Vuetify/he4rt-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vuetify/he4rt-logo.png -------------------------------------------------------------------------------- /assets/Next/Vuetelemetry/util.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Next/Vuetelemetry/util.png -------------------------------------------------------------------------------- /docs/.vuepress/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/docs/.vuepress/public/favicon.ico -------------------------------------------------------------------------------- /assets/Conceitos/Diretivas/vfor1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Conceitos/Diretivas/vfor1.png -------------------------------------------------------------------------------- /assets/Vue Router/Navegação/login-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vue Router/Navegação/login-page.png -------------------------------------------------------------------------------- /assets/Iniciando com Vue/VueCLI/vuecreate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Iniciando com Vue/VueCLI/vuecreate.png -------------------------------------------------------------------------------- /assets/Vuex/Gerenciamento de Estado/vuex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vuex/Gerenciamento de Estado/vuex.png -------------------------------------------------------------------------------- /assets/Iniciando com Vue/VueCLI/vuelocalhost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Iniciando com Vue/VueCLI/vuelocalhost.png -------------------------------------------------------------------------------- /assets/Iniciando com Vue/VueCLI/vueproject.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Iniciando com Vue/VueCLI/vueproject.png -------------------------------------------------------------------------------- /assets/Testes e Storybook/Cypress no Vue/e2e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Testes e Storybook/Cypress no Vue/e2e.png -------------------------------------------------------------------------------- /assets/Conceitos/LifeCycleHooks/lifecyclehooks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Conceitos/LifeCycleHooks/lifecyclehooks.png -------------------------------------------------------------------------------- /assets/Conceitos/Transições/simple_transition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Conceitos/Transições/simple_transition.png -------------------------------------------------------------------------------- /assets/Testes e Storybook/Storybook/storybook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Testes e Storybook/Storybook/storybook.png -------------------------------------------------------------------------------- /assets/Vue Router/Rotas Filhas/dashboard-home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vue Router/Rotas Filhas/dashboard-home.png -------------------------------------------------------------------------------- /assets/Vuetify/O que e Vuetify/project_plugin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vuetify/O que e Vuetify/project_plugin.png -------------------------------------------------------------------------------- /assets/Vuetify/O que e Vuetify/project_vue_cli.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vuetify/O que e Vuetify/project_vue_cli.png -------------------------------------------------------------------------------- /assets/Vuetify/O que e Vuetify/project_vuetify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vuetify/O que e Vuetify/project_vuetify.png -------------------------------------------------------------------------------- /assets/Vuetify/Componentes/component_header_final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vuetify/Componentes/component_header_final.png -------------------------------------------------------------------------------- /assets/Vuetify/Componentes/project_landing_page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vuetify/Componentes/project_landing_page.png -------------------------------------------------------------------------------- /assets/Vuetify/O que e Vuetify/project_dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vuetify/O que e Vuetify/project_dashboard.png -------------------------------------------------------------------------------- /assets/Vuetify/O que e Vuetify/project_helloworld.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vuetify/O que e Vuetify/project_helloworld.png -------------------------------------------------------------------------------- /assets/Testes e Storybook/Cypress no Vue/e2e-tests.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Testes e Storybook/Cypress no Vue/e2e-tests.png -------------------------------------------------------------------------------- /assets/Vuex/Gerenciamento de Estado/vuex_structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vuex/Gerenciamento de Estado/vuex_structure.png -------------------------------------------------------------------------------- /assets/Vuetify/Componentes/component_header_location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vuetify/Componentes/component_header_location.png -------------------------------------------------------------------------------- /assets/Vuetify/O que e Vuetify/create_project_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vuetify/O que e Vuetify/create_project_details.png -------------------------------------------------------------------------------- /assets/Vuetify/O que e Vuetify/create_project_features.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vuetify/O que e Vuetify/create_project_features.png -------------------------------------------------------------------------------- /assets/Vuetify/O que e Vuetify/create_project_preset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vuetify/O que e Vuetify/create_project_preset.png -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*.md] 4 | indent_style = space 5 | indent_size = 2 6 | charset = utf-8 7 | trim_trailing_whitespace = false 8 | insert_final_newline = false -------------------------------------------------------------------------------- /assets/Iniciando com Vue/Componentização/componentization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Iniciando com Vue/Componentização/componentization.png -------------------------------------------------------------------------------- /assets/Vue Router/Iniciando com Vue Router/router-structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vue Router/Iniciando com Vue Router/router-structure.png -------------------------------------------------------------------------------- /assets/Vuetify/O que e Vuetify/create_project_dependencies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Novout/vue4noobs/HEAD/assets/Vuetify/O que e Vuetify/create_project_dependencies.png -------------------------------------------------------------------------------- /generi.config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | repository: "https://github.com/Novout/vue4noobs", 3 | silent: false, 4 | commits: "conventional-commits", 5 | tag: true, 6 | version: true, 7 | push: true, 8 | release: false, 9 | publish: false, 10 | exclude: [" typo"], 11 | prerelease: "beta", 12 | packagePath: "package.json", 13 | lernaPath: "lerna.json" 14 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "dev": "vuepress dev docs", 4 | "build": "vuepress build docs", 5 | "patch": "generi log patch", 6 | "minor": "generi log minor", 7 | "major": "generi log major" 8 | }, 9 | "devDependencies": { 10 | "vuepress": "^1.5.0", 11 | "generi": "2.0.4" 12 | }, 13 | "dependencies": { 14 | "vuepress-theme-yuu": "^2.3.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /docs/tutorial/9 - Next/11 - Obrigado.md: -------------------------------------------------------------------------------- 1 | # Obrigado 2 | 3 | Muito obrigado por concluir o curso! Com todo o conteúdo passado você tem muitas alternativas para aprimorar seu conhecimento utilizado **Vue 3.x**! 4 | 5 | Em caso de dúvidas ou sugestões, contate diretamente pelo discorda da [He4rt](discord.io/He4rt) ou pelo criadores: 6 | 7 | Giovane Cardoso - [Twitter](https://twitter.com/NovoutT) - novout@hotmail.com 8 | 9 | [Projeto final](https://github.com/Novout/vue4noobs-projeto) 10 | 11 | [Repositório atual](https://github.com/Novout/vue4noobs) 12 | -------------------------------------------------------------------------------- /docs/tutorial/9 - Next/9 - Vuetelemetry.md: -------------------------------------------------------------------------------- 1 | # Vuetelemetry 2 | 3 | Desenvolvido pelo criador do `Nuxt.js`, o [Vuetelemetry](https://vuetelemetry.com/) foi desenvolvido para aprofundar os plugins de detecção de sites que usam `Vue`, mostrando detalhadamento o que foi utilizado. 4 | 5 | * Exemplo do próprio site do Vuetelemetry 6 | 7 |

8 | Imagem demonstrando a utilidade da ferramenta Vuetelemetry 9 |

10 | 11 | [Próxima Seção](./10%20-%20IonicVue.md) 12 | -------------------------------------------------------------------------------- /docs/tutorial/8 - Ecossistema Vue/7 - Obrigado.md: -------------------------------------------------------------------------------- 1 | # Obrigado 2 | 3 | Muito obrigado por concluir o curso! Com todo o conteúdo passado você tem muitas alternativas para aprimorar seu conhecimento utilizado **Vue 2.x**! 4 | 5 | Em caso de dúvidas ou sugestões, contate diretamente pelo discorda da [He4rt](discord.io/He4rt) ou pelo criadores: 6 | 7 | Giovane Cardoso - [Twitter](https://twitter.com/NovoutT) - novout@hotmail.com. 8 | 9 | [Projeto final](https://github.com/Novout/vue4noobs-projeto) 10 | 11 | Se pretende continuar a dar uma olhada no Vue 3.x, clique [aqui](../9%20-%20Next/1%20-%20API.md) 12 | -------------------------------------------------------------------------------- /docs/tutorial/8 - Ecossistema Vue/2 - Gridsome.md: -------------------------------------------------------------------------------- 1 | # Gridsome 2 | 3 | O [Gridsome](https://gridsome.org/docs/) é uma framework do **Vue** para construção de sites de forma rápida, sendo parecido em muitas partes com o **Gatsby** do **React**. 4 | 5 | ## Utilizando o Grisome 6 | 7 | `yarn global add @gridsome/cli` 8 | 9 | `gridsome create my-gridsome-site` 10 | 11 | ## Data 12 | 13 | O **Gridsome** utiliza o [GraphQL](https://gridsome.org/docs/data-layer/) para a importação de dados no seu projeto. 14 | 15 | Na próxima seção, iremos de mostrar o **VueNative**, uma forma de utilizar o **Vue** no **Mobile**, nos vemos lá! 16 | 17 | [Próxima Seção](./3%20-%20VueNative.md) -------------------------------------------------------------------------------- /docs/.vuepress/config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | base: "/vue4noobs/", 3 | title: "Vue4noobs pela He4rt Developers", 4 | theme: "yuu", 5 | description: "Vue.js", 6 | head: [ 7 | ["link", { rel: "icon", href: "/favicon.ico" }], 8 | ["meta", { name: 'google-site-verification', content: 'bmr3QFy052qbYVYRSuLrZrIpJPgIoLv2kIOXfdkwtkk' }], 9 | ], 10 | themeConfig: { 11 | yuu: { 12 | defaultDarkTheme: true, 13 | defaultColorTheme: "purple", 14 | }, 15 | nav: [ 16 | { text: "Home", link: "/" }, 17 | { text: "Tutorial", link: "/tutorial/1-Iniciando%20com%20Vue/0-Antes%20de%20começar.html" }, 18 | { text: "He4rt", link: "https://twitter.com/He4rtDevs" } 19 | ], 20 | } 21 | }; 22 | -------------------------------------------------------------------------------- /docs/tutorial/8 - Ecossistema Vue/3 - VueNative.md: -------------------------------------------------------------------------------- 1 | # VueNative 2 | 3 | O [VueNative](https://vue-native.io/) é uma estrutura para criar aplicativos móveis nativos entre plataformas usando JavaScript. Ele utiliza o próprio `react-native` por baixo dos panos para conseguirmos utilizar os componentes **Vue**. 4 | 5 | ## Instalação 6 | 7 | Recomendamos que leia a [documentação](https://vue-native.io/docs/installation.html) de instalação do **VueNative**. 8 | 9 | * O **VueNative** ainda está em desenvolvimento, falta amadurecimento da plataforma. 10 | 11 | * Também existe a opção do [VueNativeScript](https://nativescript-vue.org/) para o **mobile**. 12 | 13 | Na próxima seção iremos te mostrar como utilizar o **Vue** em conjunto com o **Electron**, nos vemos lá! 14 | 15 | [Próxima Seção](./4%20-%20VueElectron.md) 16 | 17 | -------------------------------------------------------------------------------- /docs/tutorial/6-Bibliotecas Adicionais/6-VuePropertyDecorator.md: -------------------------------------------------------------------------------- 1 | # Vue Property Decorator 2 | 3 | No **Vue-CLI** é posível escolher a opção de usar o **Vue** com **Typescript**, e o [Property Decorator](https://github.com/kaorun343/vue-property-decorator) melhora esta experiência. 4 | 5 | Exemplo: 6 | 7 | ```ts 8 | import { Vue, Component, Emit } from 'vue-property-decorator'; 9 | 10 | @Component 11 | export default class He4rtComponent extends Vue { 12 | he4rt = 'He4rt'; 13 | 14 | @Emit() 15 | Dev() { 16 | this.he4rt += ' Developers'; 17 | } 18 | }; 19 | ``` 20 | 21 | Saiba mais sobre o **Vue** com **Typescript** clicando [aqui](https://br.vuejs.org/v2/guide/typescript.html). 22 | 23 | Na próxima seção, iremos mostrar como utilizar o **awesome icons** no **Vue**, nos vemos lá! 24 | 25 | [Próxima Seção](./7-VueFontAwesome.md) -------------------------------------------------------------------------------- /docs/tutorial/8 - Ecossistema Vue/5 - Quasar.md: -------------------------------------------------------------------------------- 1 | # Quasar 2 | 3 | O [Quasar](https://quasar.dev/) é um framework baseado em Vue.js que permite desenvolver rapidamente sites/aplicativos responsivos em vários formatos, ou seja, tanto aplicações Web quanto Mobile usando apenas uma ferramenta, seguindo os conceitos de [PWA](https://en.m.wikipedia.org/wiki/Progressive_web_application). 4 | 5 | ## Iniciando com Quasar 6 | 7 | Instalando o Quasar: 8 | 9 | ```bash 10 | yarn global add @quasar/cli 11 | ou 12 | npm install -g @quasar/cli 13 | ``` 14 | 15 | Iniciando um Projeto: 16 | 17 | ```bash 18 | quasar create 19 | ``` 20 | 21 | Comandos disponíveis no package.json: 22 | 23 | ```bash 24 | dev: quasar dev 25 | build: quasar build 26 | build:pwa: quasar build -m pwa 27 | ``` 28 | 29 | [Próxima Seção](./6%20-%20Vuepress.md) 30 | -------------------------------------------------------------------------------- /docs/tutorial/9 - Next/7 - Vite.md: -------------------------------------------------------------------------------- 1 | # Vite 2 | 3 | O [Vite](https://github.com/vitejs/vite) veio com a proposta de reduzir o tempo necessário para hot-reload, podendo utilizar tanto com Vue, como com Preact.js e React.js. 4 | 5 | ## Utilização 6 | 7 | ```sh 8 | yarn create vite-app 9 | cd 10 | yarn 11 | yarn dev 12 | ``` 13 | 14 | React: 15 | 16 | `yarn create vite-app --template react` 17 | 18 | Preact: 19 | 20 | `yarn create vite-app --template preact` 21 | 22 | * Até o momento(17/12/2020), o Vite com JSX apresenta problemas, além de não ser totalmente compatível com algumas bibliotecas (Electron/Nuxt). 23 | 24 | ## Vitepress 25 | 26 | O [Vitepress](https://github.com/vuejs/vitepress) é a junção do já falado aqui no curso VuePress com o Vite, no momento estando em WIP. 27 | 28 | [Próxima Seção](./8%20-%20Pinia.md) 29 | -------------------------------------------------------------------------------- /docs/tutorial/6-Bibliotecas Adicionais/9-AntDesignVue.md: -------------------------------------------------------------------------------- 1 | # Ant Design Vue 2 | 3 | [Ant](https://www.antdv.com/docs/vue/introduce/) é uma framework que possui componentes de alta qualidade para os seus projetos, sendo essa sua versão para o Vue, funcionando de uma forma diferente do [Vuetify](https://vuetifyjs.com/). 4 | 5 | Para instalar em um projeto já existente: 6 | 7 | `vue add ant-design` 8 | 9 | Para um novo projeto: 10 | 11 | `vue create antd-demo` 12 | 13 | Apenas instalar a dependência: 14 | 15 | `yarn add ant-design-vue` 16 | 17 | O Ant exige que se instale os componentes, vamos usar o exemplo utilizando o [Botão](https://www.antdv.com/components/button/): 18 | 19 | ```ts 20 | import { Button } from 'ant-design-vue'; 21 | Vue.use(Button); 22 | ``` 23 | 24 | Na próxima seção, iremos introduzir sobre como utilizar o **Jest** no **Vue**, te vemos lá! 25 | 26 | [Próxima Seção](../7-Testes%20e%20Storybook/1-Jest%20no%20Vue.md) 27 | -------------------------------------------------------------------------------- /REFERENCES.md: -------------------------------------------------------------------------------- 1 | # Referencias para a construção das seções 2 | 3 | **O projeto utilizou estes links como auxilio para o desenvolvimento do curso, e não sua cópia.** 4 | 5 | - [LifeCycle](https://alligator.io/vuejs/component-lifecycle/) 6 | - [Load Error](https://alligator.io/vuejs/vue-async-components-load-error/) 7 | - [Class and Styles](https://vuejs.org/v2/guide/class-and-style.html) 8 | - [Async Components](https://vueschool.io/articles/vuejs-tutorials/async-vuejs-components) 9 | - [Mixins in Vue](https://levelup.gitconnected.com/how-to-use-mixins-in-vuejs-a40cc3fb4428) 10 | - [BusEvent](https://medium.com/@andrejsabrickis/https-medium-com-andrejsabrickis-create-simple-eventbus-to-communicate-between-vue-js-components-cdc11cd59860) 11 | - [Sass Guidelines](https://sass-guidelin.es/pt/) by *community* 12 | - [SCSS como você nunca viu](https://dev.to/deverebor/scss-como-voce-nunca-viu-1d99) by *@deverebor* 13 | - [Sass Basics](https://sass-lang.com/guide) by *Sass* 14 | -------------------------------------------------------------------------------- /docs/tutorial/1-Iniciando com Vue/0-Antes de começar.md: -------------------------------------------------------------------------------- 1 | ## Antes de começar 2 | 3 | Bem-Vindo ao curso!Nosso objetivo é te oferecer todo o conteúdo introdutório para Vue em todos os aspectos possíveis. 4 | 5 | Para o curso, é necessario um bom conhecimento de HTML/CSS e especialmente JavaScript, devido ao fato do curso ser focado apenas na framework, e não na linguagem. 6 | 7 | Temas que serão abordados: 8 | 9 | - Vue 10 | - Vuetify 11 | - Vue Router 12 | - Vuex 13 | - Bibliotecas 14 | - Testes 15 | - Ecossistema 16 | 17 | Não se assuste, **depois de Vuex** não iremos aprofundar muito sobre as tecnologias, o intuito é você saber que aquilo existe no ecossistema Vue, dando uma noção geral para você conseguir se aprofundar no Vue :) 18 | 19 | ## Vue 3 20 | 21 | O curso foi feito para a versão 2.x, mas não se preocupe! o Vue 3 apenas acrescenta novos conteúdos, toda a base do vue continua sendo a mesma! 22 | 23 | [Ir para Próxima Seção](./1-O%20que%20e%20Vue.md) 24 | -------------------------------------------------------------------------------- /docs/tutorial/3-Vuetify/4-Considerações.md: -------------------------------------------------------------------------------- 1 | # Considerações 2 | 3 | ## Projeto 4 | 5 | Todas as próximas seções de nosso curso será implementando conteúdo em nosso projeto: 6 | 7 | * VueRouter - Implementação das rotas e construção do formulário de login 8 | 9 | * Vuex - Gerenciamento de Estado nos permitindo a salvar dados do usuário para a aplicação 10 | 11 | * Bibliotecas Adicionais - Deixar a aplicação mais robusta e refinamentos gerais 12 | 13 | * Testes e Documentação - Relacionado ao projeto 14 | 15 | A Partir do **Nuxt** iremos mostrar outras tecnologias baseadas no **Vue**. 16 | 17 | ## Recomendações 18 | 19 | Explore os Componentes que o [Vuetify](https://vuetifyjs.com/pt-BR/components/cards/) dispoem, irão complementar e muito sua aplicação! 20 | 21 | --- 22 | 23 | Na próxima seção iremos iniciar com o **VueRouter** e já utilizando em nosso projetinho, nos vemos lá! 24 | 25 | [Próxima Seção](../4-Vue%20Router/1-Iniciando%20com%20Vue%20Router.md) 26 | -------------------------------------------------------------------------------- /docs/tutorial/6-Bibliotecas Adicionais/5-VueResource.md: -------------------------------------------------------------------------------- 1 | # Vue Resource 2 | 3 | O **VueResource** é um http client para o **Vue**. Em uma das seções já mostramos em como configurar o **http** para utilizar junto com o **axios**, mas podemos usar o próprio **VueResource** 4 | 5 | Instalação: `yarn add vue-resource` 6 | 7 | ## Configuração 8 | 9 | ```ts 10 | new Vue({ 11 | http: { 12 | root: '/root', 13 | headers: { 14 | Authorization: 'Bearer'. 15 | }. 16 | }. 17 | }); 18 | ``` 19 | 20 | ## Exemplo 21 | 22 | ```ts 23 | this.$http.get('/url') 24 | .then(res => { 25 | 26 | console.log(res.body()); 27 | }, res => { 28 | console.error(err); 29 | } 30 | ``` 31 | 32 | Para mais detalhes sobre o **VueLoader** clique [aqui](https://github.com/pagekit/vue-resource) 33 | 34 | Na próxima seção, iremos mostrar como utilizar o **TypeScript** no **Vue** com o auxílio do **PropertyDecorator**, nos vemos lá! 35 | 36 | [Próxima Seção](./6-VuePropertyDecorator.md) -------------------------------------------------------------------------------- /docs/tutorial/6-Bibliotecas Adicionais/4-VueDarkMode.md: -------------------------------------------------------------------------------- 1 | # Vue Dark Mode 2 | 3 | O VueDarkMode é um conjunto de componentes projetados para facilitar a projeção de transiçõe sentre white mode e dark mode. 4 | 5 | ## Como instalar 6 | 7 | `yarn add @growthbunker/vuedarkmode` 8 | 9 | `./src/main.js` 10 | 11 | ```ts 12 | import Vue from "vue"; 13 | import VueDarkMode from "@growthbunker/vuedarkmode"; 14 | 15 | Vue.use(VueDarkMode); 16 | ``` 17 | 18 | O **VueDarkMode** possui: 19 | 20 | - Alerts 21 | - Avatars 22 | - Badges 23 | - Buttons 24 | - Dividers 25 | - Headings 26 | - Icons 27 | - Progress Bar 28 | - Spinners 29 | - Toasts 30 | - Checkboxes 31 | - Images 32 | - Inputs 33 | - Numerics 34 | - Radios 35 | - Selects 36 | - Tabs 37 | - Textareas 38 | - Toggles 39 | 40 | Usando os **componentes*, basta passar as **propriedades** que estão na **documentação** de cada **componente**. 41 | 42 | Na próxima seção, iremos mostrar como utilizar o **VueResource**, te vemos lá! 43 | 44 | [Próxima Seção](./5-VueResource.md) -------------------------------------------------------------------------------- /docs/tutorial/7-Testes e Storybook/3-Storybook.md: -------------------------------------------------------------------------------- 1 | # Storybook 2 | 3 | O [Storybook](https://storybook.js.org/) é uma ferramenta para o desenvolvimento de componentes de interface do usuário isolados para React, Vue e Angular. Torna a criação de UIs impressionantes organizada e eficiente. 4 | 5 | ## Utilizando no Vue 6 | 7 | Vamos utilizar o instalador global: 8 | 9 | `npx -p @storybook/cli sb init --type vue` 10 | 11 | Agora podemos criar nossas histórias em `./src/stories/**` 12 | 13 | Para rodar o **storybook**, usamos o comando `yarn storybook` 14 | 15 |

16 | Imagem selecionando o vuetify 17 |

18 | 19 | * Não será explicado a sua utilização no projeto pois iria distânciar da ideia do 4noobs, apenas mostramos como utilizar no **Vue**, realmente recomendamos que dê uma lida sobre, pois pode ser muito **útil** para documentação de projetos. 20 | 21 | Na próxima seção, iremos começar a mostrar um pouco mais do **Ecossistema** do **Vue**, nos vemos lá! 22 | 23 | [Próxima Seção](../8%20-%20Ecossistema%20Vue/1%20-%20Nuxt.md) 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Giovane Cardoso 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /docs/tutorial/9 - Next/10 - IonicVue.md: -------------------------------------------------------------------------------- 1 | # Ionic Vue 3 2 | 3 | O [Ionic](https://ionicframework.com/docs/vue/overview) lançou uma versão compatível com o Vue 3, trazendo uma nova forma de criar aplicativos. 4 | 5 | ## Iniciando com Ionic Vue 3.x 6 | 7 | Primeiramente, precisamos instalar as dependência do Ionic: 8 | 9 | `yarn global add -g @ionic/cli@latest native-run cordova-res` 10 | 11 | ou 12 | 13 | `npm install -g @ionic/cli@latest native-run cordova-res` 14 | 15 | Para criar o nosso primeiro aplicatio, usamos: 16 | 17 | `ionic start heart-project tabs --type vue --capacitor` 18 | 19 | Devido ao [Capacitor](https://capacitorjs.com/), precisamos instalar os elementos para PWA: 20 | 21 | `yarn add install @ionic/pwa-elements` 22 | 23 | ou 24 | 25 | `npm install @ionic/pwa-elements` 26 | 27 | em nosso `main.ts`, adicionamos: 28 | 29 | ```ts 30 | import { defineCustomElements } from '@ionic/pwa-elements/loader'; 31 | 32 | defineCustomElements(window); 33 | ``` 34 | 35 | Agora só precisamos rodar: 36 | 37 | `ionic serve` 38 | 39 | * Plugins externos do Ionic funcionam da mesma forma com o Vue 3.x 40 | 41 | [Próxima Seção](./11%20-%20Obrigado.md) 42 | -------------------------------------------------------------------------------- /.github/workflows/action.yml: -------------------------------------------------------------------------------- 1 | 2 | name: Deploy to GH-Pages 3 | 4 | on: 5 | push: 6 | branches: [ master, main ] 7 | 8 | permissions: 9 | contents: write 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | 15 | strategy: 16 | matrix: 17 | node-version: [24.x] 18 | 19 | steps: 20 | - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 21 | - name: Install pnpm 22 | uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0 23 | with: 24 | version: 10 25 | - name: Install Node.js 26 | uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 27 | with: 28 | node-version: ${{ matrix.node-version }} 29 | cache: 'pnpm' 30 | 31 | - name: Install Dependencies 32 | run: pnpm install 33 | 34 | - name: Run build 35 | run: pnpm run build 36 | 37 | - name: Deploy 38 | uses: JamesIves/github-pages-deploy-action@9d877eea73427180ae43cf98e8914934fe157a1a # v4.7.6 39 | with: 40 | folder: docs/.vuepress/dist 41 | clean: true -------------------------------------------------------------------------------- /docs/tutorial/8 - Ecossistema Vue/6 - Vuepress.md: -------------------------------------------------------------------------------- 1 | 2 | # Vuepress 3 | 4 | A página que você está vendo o tutorial foi feita utilizando [Vuepress](https://vuepress.vuejs.org/), que é um gerador de página estática que utiliza [Markdown](https://pt.wikipedia.org/wiki/Markdown#:~:text=Markdown%20%C3%A9%20uma%20linguagem%20simples,seu%20texto%20em%20HTML%20v%C3%A1lido.) 5 | 6 | Para criarmos o nosso projeto, podemos utilizar o seguinte comando: 7 | 8 | `yarn create vuepress-site ` 9 | 10 | Dessa forma, o nosso projeto já irá vir com o seguinte boilerplate: 11 | 12 | ```text 13 | . 14 | ├── docs 15 | | └── node_modules 16 | | └── src 17 | | | └── .vuepress 18 | | | └── config 19 | | | └── guide 20 | | | └── index.md 21 | | └── .gitignore 22 | | └── package.json 23 | | └── yarn.lock 24 | ``` 25 | 26 | * Em .vuepress é aonde fica todas as configurações base do Vuepress. 27 | 28 | * Em config é aonde fica o markdown de configuração inicial da sidebar. 29 | 30 | * Em guide fica alguns auxilios para a utilização do vuepress 31 | 32 | * index.md é o markdown da página inicial que será renderizado 33 | 34 | Na próxima seção, temos agradecimentos especiais! 35 | 36 | [Próxima Seção](./7%20-%20Obrigado.md) 37 | -------------------------------------------------------------------------------- /docs/tutorial/1-Iniciando com Vue/5-Componentização.md: -------------------------------------------------------------------------------- 1 | # Componentização 2 | 3 | Resumindo: `Se você está copiando código, falta componentização.` 4 | 5 | Agora falando um pouco mais sério: 6 | 7 | Um componente é algo que sozinho tem um sentido, ele pode ser único, ou um conjunto de vários outros components.Por exemplo, o cabeçalho de um site ele é unico, por mais que pode variar quando o usuario ta logado/deslogado, ele continua sendo um cabeçalho, então continua possuindo um único sentido. 8 | 9 | A vantagem da componentização é a reutilização de código e padronização, pois se for necessário alguma alteração no cabeçalho, por exemplo, não teremos que procurar todos os cabeçalhos na aplicação inteira. 10 | 11 | É comum que um aplicativo seja organizado em uma árvore de componentes aninhados de forma parecido com uma [Árvore](https://pt.wikibooks.org/wiki/Algoritmos_e_Estruturas_de_Dados/%C3%81rvore): 12 | 13 |

14 | Imagem mostrando o sentido de componentização 15 |

16 | 17 | Na próxima seção iremos iniciar o estudo dos conceitos do vue, mostrando as suas vantagens em relação ao VanillaJS. 18 | 19 | [Próxima Seção](../2-Conceitos/1-Data,%20Methods%20e%20Modificadores.md) -------------------------------------------------------------------------------- /docs/tutorial/6-Bibliotecas Adicionais/7-VueFontAwesome.md: -------------------------------------------------------------------------------- 1 | # Vue Awesome Icons 2 | 3 | O [Vue FontAwesome](https://github.com/FortAwesome/vue-fontawesome) é o port do conhecido [FontAwesome](https://fontawesome.com/icons?d=gallery), assim conseguimos utilizar as fontes no **Vue**: 4 | 5 | ```ts 6 | yarn add @fortawesome/fontawesome-svg-core 7 | yarn add @fortawesome/free-solid-svg-icons 8 | yarn add @fortawesome/vue-fontawesome 9 | ``` 10 | 11 | O exemplo recomendado: 12 | 13 | ```ts 14 | import Vue from 'vue'; 15 | import { library } from '@fortawesome/fontawesome-svg-core'; 16 | import { faUserSecret } from '@fortawesome/free-solid-svg-icons'; 17 | import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'; 18 | 19 | library.add(faUserSecret); 20 | 21 | Vue.component('font-awesome-icon', FontAwesomeIcon); 22 | ``` 23 | 24 | * Registrando o componente **font-awesome-icon** podemos usá-lo em nosso template: 25 | 26 | ```html 27 | 28 | ``` 29 | 30 | * Para usar os ícones sem ser em usa versão default(solid), verifique a documentação. 31 | 32 | * Registre os ícones usando o `library.add(faIcone)` 33 | 34 | Na próxima seção, iremos introduzir sobre como utilizar o **Jest** no **Vue**, te vemos lá! 35 | 36 | [Próxima Seção](./8-VuexClassModules.md) 37 | -------------------------------------------------------------------------------- /docs/tutorial/6-Bibliotecas Adicionais/2-Vuei18n.md: -------------------------------------------------------------------------------- 1 | # Vue i18n 2 | 3 | O [Vuei18n](https://kazupon.github.io/vue-i18n/) é um plugin para internacionalização que o **Vue** nos disponibiliza. 4 | 5 | ## Estrutura 6 | 7 | Todas as mensagens irão ficar em arquivos como **objetos literais** 8 | 9 | ```ts 10 | const messages = { 11 | en: { 12 | message: { 13 | hello: 'Hello' 14 | } 15 | }, 16 | pt_BR: { 17 | message: { 18 | hello: 'Olá!' 19 | } 20 | } 21 | } 22 | ``` 23 | 24 | E exibir no template como: 25 | 26 | ```ts 27 |

{{ $t('message.hello') }}

28 | ``` 29 | 30 | Dessa forma, tudo oque for estático em nossa aplicação irá ser exibido a partir de um objeto, então: 31 | 32 | * É recomendável começar o projeto JÁ utilizando o i18n, pois para reestruturar tudo pode ser uma dor de cabeça 33 | 34 | * Mensagens em certas linguagens podem ficar muito grande ou muito pequeno do que o originalmente esperado. 35 | 36 | * Apenas utilize i18n se o seu projeto seja **REALMENTE** internacional, pois pode perder muito tempo no projeto sem necessidade. 37 | 38 | * NÃO iremos mostrar a aplicação do i18n no nosso projeto atual pois iria precisar refazer algumas coisas, o que quebraria a ideia do curso, mas fique á vontade para utilizá-lo! 39 | 40 | Na próxima seção iremos aplicar notificações com AWN, nos vemos lá! 41 | 42 | [Próxima Seção](./3-VueAWN.md) -------------------------------------------------------------------------------- /docs/tutorial/3-Vuetify/3-Customização.md: -------------------------------------------------------------------------------- 1 | # Customização 2 | 3 | Vamos agora customizar o nosso **tema**, para conseguirmos seguir uma padronização. 4 | 5 | Quando instalamos o **Vuetify**, foi criado uma pasta **plugins** contendo o **vuetify.js**: 6 | 7 | ```ts 8 | import Vue from 'vue'; 9 | import Vuetify from 'vuetify/lib'; 10 | 11 | Vue.use(Vuetify); 12 | 13 | export default new Vuetify({ 14 | }); 15 | ``` 16 | 17 | Dentro do **Vuetify** podemos passar configurações por padrão. 18 | 19 | Por exemplo, vamos passar o tema padrão para a aplicação: 20 | 21 | ```ts 22 | import Vue from 'vue'; 23 | import Vuetify from 'vuetify/lib'; 24 | 25 | Vue.use(Vuetify); 26 | 27 | export default new Vuetify({ 28 | theme: { 29 | dark: true, 30 | }, 31 | }); 32 | ``` 33 | 34 | ## Cores 35 | 36 | Podemos também customizar diretamente as **cores**: 37 | 38 | ```ts 39 | import Vue from 'vue'; 40 | import Vuetify from 'vuetify/lib'; 41 | 42 | Vue.use(Vuetify); 43 | 44 | export default new Vuetify({ 45 | themes: { 46 | light: { 47 | primary: '#a142f5', 48 | secondary: '#f5f5f5', 49 | accent: '#c463e6', 50 | error: '#e66365', 51 | }, 52 | }, 53 | theme: { 54 | light: true, 55 | }, 56 | }); 57 | ``` 58 | 59 | Dessa forma, podemos acessar as cores globais do **Vuetify** de uma forma já **definida** 60 | 61 | Na próxima seção iremos discutir um pouco sobre o que virá nas próximas seções, te vemos lá! 62 | 63 | [Próxima Seção](./4-Considerações.md) -------------------------------------------------------------------------------- /docs/tutorial/2-Conceitos/14-Considerações.md: -------------------------------------------------------------------------------- 1 | # Considerações finais 2 | 3 | Obrigado mesmo por ter chegado até aqui! Com o conhecimento que passamos, ja é possível fazer muita coisa mesmo com o Vue, durante as próximas seções iremos explorar todo o ecossistema que o **Vue** nos forneçe! 4 | 5 | A partir de agora, começaremos um projeto aplicando bibliotecas do **Vue**, assim conseguindo explicar coisas na prática, além de exercitar os conceitos. 6 | 7 | Qualquer dúvida ou reportar algum problema sobre o curso, reporte diretamente no [repositório](https://github.com/Novout/vue4noobs). E se possível deixe uma estrela, foi realmente trabalhoso. 8 | 9 | ## Tópicos Adicionais 10 | 11 | Tópicos como **componentes assíncronos** e **manipulações de carregamento** não serão abordados pois o objetivo do curso é uma introdução ao vue mostrando todo o seu **ecossistema**, mas iremos deixar a seguir se desejar ler sobre estes tópicos: 12 | * 13 | [Componentes Assíncronos](https://vueschool.io/articles/vuejs-tutorials/async-vuejs-components/) 14 | 15 | [Manipulações de Carregamento](https://alligator.io/vuejs/vue-async-components-load-error/) 16 | 17 | * Infelizmente a maioria dos conteúdos de **Vue** ainda estão em inglês, e é exatamente o motivo para a existência deste mini-curso sendo o objetivo conseguir atingir novos entusiastas em **Vue**, então em um futuro poderemos ter tópicos mais específicos traduzidos(por exemplo, o novo Vue 3). 18 | 19 | [Próxima Seção](./../3-Vuetify/1-Iniciando%20com%20Vuetify.md) -------------------------------------------------------------------------------- /docs/tutorial/5-Vuex/6-Getters.md: -------------------------------------------------------------------------------- 1 | # Getters 2 | 3 | Os **getters** funcionam da mesma forma que as **computeds**, e no nosso caso iremos usar para concatenar a string que será exibida no nosso `/dashboard`: 4 | 5 | ```ts 6 | import Vue from 'vue'; 7 | import Vuex from 'vuex'; 8 | 9 | Vue.use(Vuex); 10 | 11 | export default new Vuex.Store({ 12 | state: { 13 | usuario: { 14 | conta: '', 15 | senha: '', 16 | }, 17 | }, 18 | actions: { 19 | usuarioLogado(context, usuario) { 20 | context.commit('usuarioLogado', usuario); 21 | }, 22 | }, 23 | mutations: { 24 | usuarioLogado(state, payload) { 25 | state.usuario = payload; 26 | }, 27 | }, 28 | getters: { 29 | usuarioBemVindo(state) { 30 | return `Olá ${state.usuario.conta}!`; 31 | }, 32 | }, 33 | modules: { 34 | }, 35 | }); 36 | ``` 37 | 38 | Dessa forma, podemos utilizar o `usuarioBemVindo` no template: 39 | 40 | `./src/pages/Dashboard.vue` 41 | 42 | ```ts 43 | 44 | 45 | {{ usuarioBemVindo }} 46 | Drawer 47 | 48 | 49 | 50 | // ... 51 | 52 | import { mapGetters } from 'vuex'; 53 | 54 | computed: { 55 | ...mapGetters(['usuarioBemVindo']), 56 | }, 57 | ``` 58 | 59 | * Trocamos o **mapState** por **mapGetters** 60 | 61 | Na próxima seção vamos mostrar como melhorar nossa estrutura, nos vemos lá! 62 | 63 | [Próxima Seção](./7-Estrutura.md) -------------------------------------------------------------------------------- /docs/tutorial/2-Conceitos/11-Pre-Processadores.md: -------------------------------------------------------------------------------- 1 | # Pre-Processadores 2 | 3 | Nas seções de introdução, demos o exemplo que no **Vue** é possível utilizar pre-processadores de forma facilitada, agora iremos explicar como implementar: 4 | 5 | * Nas opções de criação do projeto manual usando o **VueCLI**, é possível adicionar os pre-processadores diretamente por lá. 6 | 7 | ## SCSS - SASS 8 | 9 | Vamos instalar primeiramente as dependências necessárias: 10 | 11 | ```zsh 12 | yarn add sass-loader sass --save-dev 13 | ``` 14 | 15 | Dessa forma, podemos agora utilizar o sass: 16 | 17 | ```vue 18 | 21 | ``` 22 | 23 | Para essa estilização se manter apenas no seu escopo, é necessário que você adicione o `scoped` no seu `style`: 24 | 25 | ```vue 26 | 29 | ``` 30 | 31 | Dessa maneira o estilo que for escrito aqui não passara para outro componente. 32 | 33 | Caso a estilização do seu componente se torne grande ou você deseja organizar melhor seus estilos é possível criar um arquivo `.scss` adicionamos como dependência: 34 | 35 | ```vue 36 | 31 | ``` 32 | 33 | ## VueRouter do Dashboard 34 | 35 | Agora vamos implementar um efeito parecido nas rotas filhas de **dashboard**: 36 | 37 | ```html 38 | 39 | 40 | 41 | 42 | 43 | 44 | 60 | ``` 61 | 62 | No próximo capítulo iremos inicializar com **Vuex**, explicando o fluxo e implementando uma simples autenticação, nos vemos lá! 63 | 64 | [Próxima Seção](../5-Vuex/1-Gerenciamento%20de%20Estado.md) 65 | -------------------------------------------------------------------------------- /docs/tutorial/9 - Next/4 - Suspense.md: -------------------------------------------------------------------------------- 1 | # Suspense 2 | 3 | Suspense é um recurso utilizado no React.js, sendo um recurso especial assim como o `transition` e `transition-group`, seu objetivo é ser um watcher do componente e ter as informações de carregamento. Por mais que podemos monitorar a criação de um componente pelo retorno do setup() sem a necessidade de recursos adicionais, o Suspense vem para utilizar isso de uma forma elegante e que facilite para os desenvolvedores. 4 | 5 | ## Utilização 6 | 7 | ```html 8 | 18 | ``` 19 | 20 | * De uma forma simples, o #default é o componente que será escutado e esperado em sua construção(finalização do hook onMounted), enquanto o #fallback é o componente que será carregado enquanto o `ComponenteEsperado` está sendo criado. 21 | 22 | * Se o componente esperado executar um erro, podemos capturar e tratar este erro: 23 | 24 | ```html 25 | 32 | ``` 33 | 34 | Agora precisamos criar a action **USUARIO_LOGADO** em nossa **loja**: 35 | 36 | `./src/store/index.js` 37 | 38 | ```ts 39 | export default new Vuex.Store({ 40 | // ... 41 | actions: { 42 | usuarioLogado(context, usuario) { 43 | context.commit('usuarioLogado', usuario); 44 | }, 45 | }, 46 | // ... 47 | }); 48 | ``` 49 | 50 | * O context terá tudo o que podemos precisar para executar na nossa action, no caso estamos utilizando o `commit` que irá mandar para nossa `mutation`. 51 | 52 | * O **usuario** é o que estamos recebendo do `dispatch` 53 | 54 | Podemos simplificar o uso também: 55 | 56 | ```ts 57 | export default new Vuex.Store({ 58 | // ... 59 | actions: { 60 | usuarioLogado({ commit }, usuario) { 61 | commit('usuarioLogado', usuario); 62 | }, 63 | }, 64 | // ... 65 | }); 66 | ``` 67 | 68 | Na próxima seção iremos criar a nossa **mutation**, nos vemos lá! 69 | 70 | [Próxima Seção](./5-Mutations.md) -------------------------------------------------------------------------------- /docs/tutorial/5-Vuex/2-Iniciando com Vuex.md: -------------------------------------------------------------------------------- 1 | # Iniciando com Vuex 2 | 3 | Primeiramente, vamos adicionar o **Vuex** em nossa aplicação: 4 | 5 | `vue add vuex` 6 | 7 | * Usando o CLI do **Vue**, ele já ira estruturar o **Vuex** 8 | 9 | Na pasta gerada `./src/store.js`, podemos ver como ficou nossa **loja**: 10 | 11 | ```ts 12 | import Vue from 'vue'; 13 | import Vuex from 'vuex'; 14 | 15 | Vue.use(Vuex); 16 | 17 | export default new Vuex.Store({ 18 | state: { 19 | }, 20 | mutations: { 21 | }, 22 | actions: { 23 | }, 24 | modules: { 25 | }, 26 | }); 27 | ``` 28 | 29 | * Iniciamente na aplicação, iremos seguir este **padrão** de estrutura, mas no final da nossa seção do **Vuex** iremos apresentar **alternativas** mais robustas. 30 | 31 | O **Vuex** não restringe a estrutura do seu código, sendo possível implementar qualquer tipo de estrutura necessária. Em vez disso, ele impõe um conjunto de princípios recomendados para projetos de médio-grande porte: 32 | 33 | * O estado do nível do aplicativo é centralizado no store. 34 | 35 | * A única maneira de mudar o estado é confirmando (ou fazendo commit das) mutações, que são transações **síncronas**. 36 | 37 | * Os getters nos permitem uma facilidade muito grande para a formatação de conteúdos do **estado** no template. 38 | 39 | * A lógica assíncrona deve ser encapsulada e pode ser composta com ações, e podem ser feitas apenas nas **actions**. 40 | 41 | * Se o arquivo da loja for muito grande, basta começar a dividir as actions, mutations e getters em arquivos separados, podendo utilizar operadores de desconstrução do **JavaScript** sem problemas. 42 | 43 | Na próxima seção, iremos mostrar formas diferentes de implementar os **estados** em nossas aplicações, nos vemos lá! 44 | 45 | [Próxima Seção](./3-State.md) -------------------------------------------------------------------------------- /docs/tutorial/9 - Next/6 - Typescript.md: -------------------------------------------------------------------------------- 1 | # Typescript 2 | 3 | Uma dos pontos bastante criticados do Vue 2.x é a falta de suporte direto ao Typescript, onde a utilização de classes com `vuex-class-modules` e `vue-class-components` era necessária, agora temos opções adicionais, principalmente devido ao Vue 3.x ser escrito no próprio Typescript. 4 | 5 | ## Configuração 6 | 7 | Se estiver utilizando o Vue-CLI, utilizamos o comando `vue add typescript` em um projeto já existente, e agora podemos utilizar como ` 72 | ``` 73 | 74 | * Iremos ensinar a como configurar o **axios** e até mesmo usar o **http** padrão do **Vue**, não se preocupe. 75 | 76 | Na próxima seção, iremos introduzir o conteúdo sobre **Getters**, nos vemos lá! 77 | 78 | [Próxima Seção](./6-Getters.md) -------------------------------------------------------------------------------- /docs/tutorial/2-Conceitos/4-CSS.md: -------------------------------------------------------------------------------- 1 | ## CSS 2 | 3 | O **CSS** no **Vue** não se diferencia muito do **CSS** utilizado normalmente, apenas com algumas modificações. 4 | 5 | ## Scoped 6 | 7 | Quando uma tag ` 18 | 19 | 24 | ``` 25 | 26 | Dessa forma, irá ser feito um "hash" do componente para o **DOM final** (ou seja, depois de ser transformado pelo **Virtual DOM**). 27 | 28 | Exemplo: 29 | 30 | ```css 31 | .container[data-v-f84hf] 32 | ``` 33 | 34 | * Você consegue observar isso facilmente olhando o html final no console de desenvolvedor. 35 | 36 | ## Module 37 | 38 | Módulos CSS é um sistema para modularização e composição de CSS no **Vue**. O **vue-loader** fornece integração de alto nível com módulos CSS como uma alternativa para parecida com a de escopos **CSS**. 39 | 40 | ```html 41 | 49 | 50 | 55 | ``` 56 | 57 | Por conta da propriedade ser computada, é possível utilizar usando o **v-bind** 58 | 59 | ```html 60 | 63 | ``` 64 | 65 | ## Estilos anexados 66 | 67 | Existe outras formas de utilziar o **v-bind** para anexar nossos estilos: 68 | 69 | Objeto: 70 | 71 | ```html 72 | 75 | 76 | 85 | ``` 86 | 87 | Array(mostrado anteriormente em **module**): 88 | 89 | ```html 90 |
91 | ``` 92 | 93 | Valores múltiplos(Vue v2.3.0+): 94 | 95 | ```html 96 |
97 | ``` 98 | 99 | [Próxima Seção](./5-Instância%20Vue.md) -------------------------------------------------------------------------------- /docs/tutorial/1-Iniciando com Vue/1-O que e Vue.md: -------------------------------------------------------------------------------- 1 | # Vue 2 | 3 | Sejam bem vindos ao paper de Vue da [He4rt Developers](discord.io/He4rt), aqui nós iremos dar uma introdução ao framework **Vue**, mostrando todo o seu conceito e mostrando como utilizar de maneira efetiva. 4 | 5 | O **Vue**(se pronuncia **view**) é um framework para a construção de sites de forma progressiva, sendo diferente de outros tipo de estrutura monolítica. O ecossistema do **Vue** é extenso possibilitando ao desenvolvedor construir aplicações Frontend Web. 6 | 7 | ## Comunidade 8 | 9 | A comunidade do **Vue** vem crescendo cada vez mais, iremos estar disponibilizando alguns links da comunidade para auxiliar seu estudo sobre a framework. 10 | 11 | [Fórum](https://forum.vuejs.org) 12 | 13 | [VueJSBrasil](http://vuejs-brasil.com.br/) 14 | 15 | [VueSchool](https://vueschool.io/) 16 | 17 | [VueMastery](https://www.vuemastery.com) 18 | 19 | [MadeWithVue](https://madewithvuejs.com) 20 | 21 | [LearnVue](https://twitter.com/LearnVuejs2) 22 | 23 | ## SPA(Single Page Aplication) 24 | 25 | Significa que no **Vue** teremos uma aplicação web completa acontecendo em uma única página sem a necessidade de recarregar a página. O **Vue** também possui **SSR(Server Side Render)** com o **Nuxt** e aplicações **PWA** com o **Quasar**, mas neste início vamos focar apenas no **SPA** e apresentar alternativas futuramente. 26 | 27 | Utilizando este conceito conseguimos construir aplicações frontend de forma robusta e escalável. 28 | 29 | ## Virtual DOM 30 | 31 | Virtual DOM é um framework para manipulação do DOM(Document Object Model) que é utilizado pelo **Vue**, ele faz uma representação do DOM real na linguagem JavaScript, ou seja, o DOM verdadeiro é gerado a partir do DOM Virtual.Por conta disso, o **Vue** utiliza o **vue-loader** para fazer todo o ciclo do Virtual DOM e conseguir transformar no DOM final. 32 | 33 | ## VueLoader 34 | 35 | O **vue-loader** irá analisar o arquivo, pegar cada bloco de linguagem e montá-lo de volta em um módulo CommonJs cujo module.exports seja um objeto de opções do componente **Vue.js**. 36 | 37 | Para manipular, o **Vue** utiliza um sistema de componentes com a extensão **.vue**. O arquivo é um formato de arquivo personalizado que usa a sintaxe parecido com o HTML para descrever um componente Vue. Cada arquivo é dividido em três partes: `