|
1 |
| -# The Application Instance |
| 1 | +--- |
| 2 | +title: A Instância Vue |
| 3 | +type: guide |
| 4 | +order: 3 |
| 5 | +--- |
2 | 6 |
|
3 |
| -## Creating an Instance |
| 7 | +## Criando a Instância Vue |
4 | 8 |
|
5 |
| -Every Vue application starts by creating a new **application instance** with the `createApp` function: |
| 9 | +Toda aplicação Vue é iniciada com a criação de uma nova **instância Vue** com a função `Vue`: |
6 | 10 |
|
7 | 11 | ```js
|
8 |
| -Vue.createApp(/* options */) |
9 |
| -``` |
10 |
| - |
11 |
| -After the instance is created, we can _mount_ it, passing a container to `mount` method. For example, if we want to mount a Vue application on `<div id="app"></div>`, we should pass `#app`: |
12 |
| - |
13 |
| -```js |
14 |
| -Vue.createApp(/* options */).mount('#app') |
| 12 | +var vm = new Vue({ |
| 13 | + // opções |
| 14 | +}) |
15 | 15 | ```
|
16 | 16 |
|
17 |
| -Although not strictly associated with the [MVVM pattern](https://en.wikipedia.org/wiki/Model_View_ViewModel), Vue's design was partly inspired by it. As a convention, we often use the variable `vm` (short for ViewModel) to refer to our instance. |
| 17 | +Embora não seja estritamente associado com o [padrão MVVM](https://en.wikipedia.org/wiki/Model_View_ViewModel), o _design_ do Vue foi parcialmente inspirado por ele. Como convenção, muitas vezes usamos a variável `vm` (abreviação de _ViewModel_) para se referir à instância Vue. |
18 | 18 |
|
19 |
| -When you create an instance, you pass in an **options object**. The majority of this guide describes how you can use these options to create your desired behavior. For reference, you can also browse the full list of options in the [API reference](../api/options-data.html). |
| 19 | +Quando você cria uma instância Vue, é necessário passar um **objeto de opções**. A maior parte deste guia descreve como você pode utilizar estas opções para criar os comportamentos desejados. Para referência, você também pode navegar pela lista completa de opções na [documentação da API](../api/#Opcoes-Dados). |
20 | 20 |
|
21 |
| -A Vue application consists of a **root instance** created with `createApp`, optionally organized into a tree of nested, reusable components. For example, a `todo` app's component tree might look like this: |
| 21 | +Uma aplicação Vue consiste em uma **instância Vue raiz** criada com `new Vue`, opcionalmente organizada em uma árvore de componentes reutilizáveis aninhados. Por exemplo, um aplicativo de tarefas a realizar (do tipo _todo list_) poderia ter uma árvore de componentes como esta: |
22 | 22 |
|
23 | 23 | ```
|
24 |
| -Root Instance |
| 24 | +Instância Raiz |
25 | 25 | └─ TodoList
|
26 | 26 | ├─ TodoItem
|
27 |
| - │ ├─ DeleteTodoButton |
28 |
| - │ └─ EditTodoButton |
| 27 | + │ ├─ TodoButtonDelete |
| 28 | + │ └─ TodoButtonEdit |
29 | 29 | └─ TodoListFooter
|
30 |
| - ├─ ClearTodosButton |
| 30 | + ├─ TodosButtonClear |
31 | 31 | └─ TodoListStatistics
|
32 | 32 | ```
|
33 | 33 |
|
34 |
| -We'll talk about [the component system](component-basics.html) in detail later. For now, just know that all Vue components are also instances, and so accept the same options object. |
| 34 | +Falaremos sobre o [sistema de componentes](components.html) em detalhes futuramente. Por enquanto, saiba apenas que todos os componentes Vue também são instâncias, e aceitam o mesmo esquema de opções (exceto por algumas poucas opções específicas da raiz). |
35 | 35 |
|
36 |
| -## Data and Methods |
| 36 | +## Dados e Métodos |
37 | 37 |
|
38 |
| -When an instance is created, it adds all the properties found in its `data` to [Vue's **reactivity system**](reactivity.html). When the values of those properties change, the view will "react", updating to match the new values. |
| 38 | +Quando uma instância Vue é criada, ela adiciona todas as propriedades encontradas no objeto `data` ao **sistema de reatividade** do Vue. Quando os valores de qualquer destas propriedades muda, a camada visual (em inglês, _view_) "reage", atualizando-se para condizer com os novos valores. |
39 | 39 |
|
40 | 40 | ```js
|
41 |
| -// Our data object |
42 |
| -const data = { a: 1 } |
| 41 | +// Nosso objeto de dados |
| 42 | +var data = { a: 1 } |
43 | 43 |
|
44 |
| -// The object is added to the root instance |
45 |
| -const vm = Vue.createApp({ |
46 |
| - data() { |
47 |
| - return data |
48 |
| - } |
49 |
| -}).mount('#app') |
| 44 | +// O objeto é adicionado à instância Vue |
| 45 | +var vm = new Vue({ |
| 46 | + data: data |
| 47 | +}) |
50 | 48 |
|
51 |
| -// Getting the property on the instance |
52 |
| -// returns the one from the original data |
| 49 | +// Acessar a propriedade na instância |
| 50 | +// retorna aquilo que está no dado original |
| 51 | +// ou seja, é uma referência ao mesmo objeto! |
53 | 52 | vm.a === data.a // => true
|
54 | 53 |
|
55 |
| -// Setting the property on the instance |
56 |
| -// also affects the original data |
| 54 | +// Atribuir à propriedade na instância |
| 55 | +// também afeta o dado original |
57 | 56 | vm.a = 2
|
58 | 57 | data.a // => 2
|
| 58 | + |
| 59 | +// ... e vice-versa |
| 60 | +data.a = 3 |
| 61 | +vm.a // => 3 |
59 | 62 | ```
|
60 | 63 |
|
61 |
| -When this data changes, the view will re-render. It should be noted that properties in `data` are only **reactive** if they existed when the instance was created. That means if you add a new property, like: |
| 64 | +Quando este dado for modificado, a camada visual irá "re-renderizar". Deve-se observar que as propriedades em `data` só são **reativas** se elas já existiam quando a instância foi criada. Isso significa que se você adicionar uma nova propriedade, como: |
62 | 65 |
|
63 | 66 | ```js
|
64 | 67 | vm.b = 'hi'
|
65 | 68 | ```
|
66 | 69 |
|
67 |
| -Then changes to `b` will not trigger any view updates. If you know you'll need a property later, but it starts out empty or non-existent, you'll need to set some initial value. For example: |
| 70 | +Então as mudanças em `b` não irão disparar qualquer atualização na interface. Se você sabe que precisará de uma propriedade no futuro, mas ela inicia vazia ou não existente, precisará especificar algum valor inicial. Por exemplo: |
68 | 71 |
|
69 | 72 | ```js
|
70 |
| -data() { |
71 |
| - return { |
72 |
| - newTodoText: '', |
73 |
| - visitCount: 0, |
74 |
| - hideCompletedTodos: false, |
75 |
| - todos: [], |
76 |
| - error: null |
77 |
| - } |
| 73 | +data: { |
| 74 | + newTodoText: '', |
| 75 | + visitCount: 0, |
| 76 | + hideCompletedTodos: false, |
| 77 | + todos: [], |
| 78 | + error: null |
78 | 79 | }
|
79 | 80 | ```
|
80 | 81 |
|
81 |
| -The only exception to this being the use of `Object.freeze()`, which prevents existing properties from being changed, which also means the reactivity system can't _track_ changes. |
| 82 | +A única exceção é ao usar `Object.freeze()`, que previne propriedades existentes de serem modificadas. Também significa que o sistema de reatividade não pode _rastrear_ mudanças. |
82 | 83 |
|
83 | 84 | ```js
|
84 |
| -const obj = { |
| 85 | +var obj = { |
85 | 86 | foo: 'bar'
|
86 | 87 | }
|
87 | 88 |
|
88 | 89 | Object.freeze(obj)
|
89 | 90 |
|
90 |
| -const vm = Vue.createApp({ |
91 |
| - data() { |
92 |
| - return obj |
93 |
| - } |
94 |
| -}).mount('#app') |
| 91 | +new Vue({ |
| 92 | + el: '#app', |
| 93 | + data: obj |
| 94 | +}) |
95 | 95 | ```
|
96 | 96 |
|
97 | 97 | ```html
|
98 | 98 | <div id="app">
|
99 | 99 | <p>{{ foo }}</p>
|
100 |
| - <!-- this will no longer update `foo`! --> |
| 100 | + <!-- não irá atualizar mais o `foo`! --> |
101 | 101 | <button v-on:click="foo = 'baz'">Change it</button>
|
102 | 102 | </div>
|
103 | 103 | ```
|
104 | 104 |
|
105 |
| -In addition to data properties, instances expose a number of useful instance properties and methods. These are prefixed with `$` to differentiate them from user-defined properties. For example: |
| 105 | +Em adição às propriedades de dados, instâncias Vue expõem uma quantidade relevante de propriedades e métodos. Estes são prefixados com `$` para diferenciá-los das propriedades definidas pelo usuário. Por exemplo: |
106 | 106 |
|
107 | 107 | ```js
|
108 |
| -const vm = Vue.createApp({ |
109 |
| - data() { |
110 |
| - return { |
111 |
| - a: 1 |
112 |
| - } |
113 |
| - } |
114 |
| -}).mount('#example') |
| 108 | +var data = { a: 1 } |
| 109 | +var vm = new Vue({ |
| 110 | + el: '#exemplo', |
| 111 | + data: data |
| 112 | +}) |
| 113 | + |
| 114 | +vm.$data === data // => true |
| 115 | +vm.$el === document.getElementById('exemplo') // => true |
115 | 116 |
|
116 |
| -vm.$data.a // => 1 |
| 117 | +// $watch é um método da instância |
| 118 | +vm.$watch('a', function (newValue, oldValue) { |
| 119 | + // Esta função será executada quando `vm.a` mudar |
| 120 | +}) |
117 | 121 | ```
|
118 | 122 |
|
119 |
| -In the future, you can consult the [API reference](../api/instance-properties.html) for a full list of instance properties and methods. |
| 123 | +No futuro, você pode consultar a [documentação da API](../api/#Propriedades-de-Instancia) para a lista completa de propriedades e métodos da instância. |
| 124 | + |
| 125 | +## Ciclo de Vida da Instância |
120 | 126 |
|
121 |
| -## Instance Lifecycle Hooks |
| 127 | +<div class="vueschool"><a href="https://vueschool.io/lessons/understanding-the-vuejs-lifecycle-hooks?friend=vuejs" target="_blank" rel="sponsored noopener" title="Lição gratuita sobre Gatilhos do Ciclo de Vida do Vue.js">Assista a uma lição em vídeo gratuita na Vue School</a></div> |
122 | 128 |
|
123 |
| -Each instance goes through a series of initialization steps when it's created - for example, it needs to set up data observation, compile the template, mount the instance to the DOM, and update the DOM when data changes. Along the way, it also runs functions called **lifecycle hooks**, giving users the opportunity to add their own code at specific stages. |
| 129 | +Cada instância Vue passa por uma série de etapas em sua inicialização - por exemplo, é necessário configurar a observação de dados, compilar o _template_, montar a instância no DOM, e atualizar o DOM quando os dados forem alterados. Ao longo do caminho, também ocorre a invocação de agumas funções chamadas de **gatilhos de ciclo de vida** (em inglês, _lifecycle hooks_), oferecendo a oportunidade de executar lógicas personalizadas em etapas específicas. |
124 | 130 |
|
125 |
| -For example, the [created](../api/options-lifecycle-hooks.html#created) hook can be used to run code after an instance is created: |
| 131 | +Por exemplo, o gatilho [`created`](../api/#created) pode ser utilizado para executar código logo após a instância ser criada: |
126 | 132 |
|
127 | 133 | ```js
|
128 |
| -Vue.createApp({ |
129 |
| - data() { |
130 |
| - return { |
131 |
| - a: 1 |
132 |
| - } |
| 134 | +new Vue({ |
| 135 | + data: { |
| 136 | + a: 1 |
133 | 137 | },
|
134 |
| - created() { |
135 |
| - // `this` points to the vm instance |
136 |
| - console.log('a is: ' + this.a) // => "a is: 1" |
| 138 | + created: function () { |
| 139 | + // `this` aponta para a instância |
| 140 | + console.log('a é: ' + this.a) |
137 | 141 | }
|
138 | 142 | })
|
| 143 | +// => "a é: 1" |
139 | 144 | ```
|
140 | 145 |
|
141 |
| -There are also other hooks which will be called at different stages of the instance's lifecycle, such as [mounted](../api/options-lifecycle-hooks.html#mounted), [updated](../api/options-lifecycle-hooks.html#updated), and [unmounted](../api/options-lifecycle-hooks.html#unmounted). All lifecycle hooks are called with their `this` context pointing to the current active instance invoking it. |
| 146 | +Existem outros gatilhos chamados em diferentes etapas do ciclo de vida da instância, como [`mounted`](../api/#mounted), [`updated`](../api/#updated) e [`destroyed`](../api/#destroyed). Qualquer gatilho de ciclo de vida é executado com seu contexto `this` apontando para a instância Vue que o invocou. |
142 | 147 |
|
143 |
| -::: tip |
144 |
| -Don't use [arrow functions](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions) on an options property or callback, such as `created: () => console.log(this.a)` or `vm.$watch('a', newValue => this.myMethod())`. Since an arrow function doesn't have a `this`, `this` will be treated as any other variable and lexically looked up through parent scopes until found, often resulting in errors such as `Uncaught TypeError: Cannot read property of undefined` or `Uncaught TypeError: this.myMethod is not a function`. |
145 |
| -::: |
| 148 | +Não utilize [_arrow functions_](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Functions/Arrow_functions) em propriedades de opções ou _callback_, como em `created: () => console.log(this.a)` ou `vm.$watch('a', newValue => this.myMethod())`. Como as _arrow functions_ não possuem um `this`,`this` será tratado como qualquer outra variável e lexicamente pesquisada através de escopos parentais até ser encontrada, frequentemente resultando em erros como `Uncaught TypeError: Cannot read property of undefined` ou `Uncaught TypeError: this.myMethod is not a function`. |
146 | 149 |
|
147 |
| -## Lifecycle Diagram |
| 150 | +## Diagrama do Ciclo de Vida |
148 | 151 |
|
149 |
| -Below is a diagram for the instance lifecycle. You don't need to fully understand everything going on right now, but as you learn and build more, it will be a useful reference. |
| 152 | +Abaixo está um diagrama para o ciclo de vida da instância. Você não precisa entender completamente tudo o que está acontecendo neste momento, |
| 153 | +mas conforme você for aprendendo e construindo mais coisas, este diagrama se tornará uma referência útil. |
150 | 154 |
|
151 |
| -<img src="/images/lifecycle.png" width="840" height="auto" style="margin: 0px auto; display: block; max-width: 100%;" loading="lazy" alt="Instance lifecycle hooks"> |
| 155 | + |
0 commit comments