You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/guide/custom-directive.md
+37-35Lines changed: 37 additions & 35 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,27 +1,28 @@
1
-
# Diretivas customizadas (Custom Directives)
1
+
# Diretivas Customizadas
2
2
3
3
## Introdução
4
4
5
-
Fora o conjunto de diretivas padrão existente por padrão no core (tipo`v-model` ou `v-show`), o Vue também possibilita registrar diretivas customizadas. Note que no Vue, a forma primária de reuso e abstração de código são os componentes. No entanto, pode haver casos em que você precise um acesso de nível mais baixo aos elementos no DOM, e é aqui que as diretivas customizadas são úteis. Um exemplo seria acionar o foco em um elemento de input, como esse:
5
+
Em adição ao conjunto de diretivas existente por padrão em seu núcleo (como`v-model` ou `v-show`), o Vue te possibilita registrar diretivas customizadas. Note que no Vue, a forma primária de reuso e abstração de código são os componentes - no entanto, pode haver casos em que você precise um acesso de nível mais baixo aos elementos no DOM, e é aqui que as diretivas customizadas são úteis. Um exemplo seria acionar o foco em um elemento `input`, como esse:
Quando a página carregar , o elemento é focado (nota: o `autofocus` não funciona no Safari de mobile). Na verdade, se você não clicou em nada desde que visitou essa página, o input acima deve estar focado agora. Além disso, você pode clicar no botão`Rerun` e o input vai ganhar foco.
9
+
Quando a página carrega, o elemento ganha o foco (nota: o atributo nativo autofocus não funciona no Safari para dispositivos móveis). Na verdade, se você não clicou em nada desde que visitou essa página, o input acima deve estar focado agora. Além disso, você pode clicar no botão`Rerun` e o input vai ganhar foco.
10
10
11
11
Agora vamos construir a diretiva que faz isso:
12
12
13
13
```js
14
14
constapp=Vue.createApp({})
15
-
//Registar uma diretiva customizada e global chamada `v-focus`
15
+
//Registra uma diretiva customizada global chamada `v-focus`
16
16
app.directive('focus', {
17
-
// Quando o elemento é montado ao DOM
17
+
// Quando o elemento vinculado é inserido no DOM
18
18
mounted(el) {
19
19
// Foca o elemento
20
20
el.focus()
21
21
}
22
22
})
23
23
```
24
-
Se você quer registrar uma diretiva local, os componentes também aceitam a opção `directives`:
24
+
25
+
Se você deseja registrar uma diretiva local em vez disso, os componentes também aceitam a opção `directives`:
25
26
26
27
```js
27
28
directives: {
@@ -34,43 +35,44 @@ directives: {
34
35
}
35
36
```
36
37
37
-
Então no template, você pode usar o novo atributo `v-focus` em qualquer elemento, tipo assim:
38
+
Então no *template*, você pode usar o novo atributo `v-focus` em qualquer elemento, por exemplo:
38
39
39
40
```html
40
41
<inputv-focus />
41
42
```
42
43
43
-
## Funções de hook (Hook Functions)
44
+
## Funções de Gatilhos (Hook Functions)
44
45
45
46
As funções de hook são as funções que são executadas conforme o estado da diretiva e há uma variedade disponível para uso (todas opcionais):
46
47
47
-
-`created`: called before the bound element's attributes or event listeners are applied. This is useful in cases where the directive needs to attach event listeners that must be called before normal `v-on`event listeners.
48
+
-`created`: Executa antes que os atributos do elemento vinculado ou ouvintes de evento sejam aplicados. Isso é útil nos casos em que a diretiva precisa anexar ouvintes de eventos que devem ser chamados antes dos ouvintes de eventos `v-on`normais.
48
49
49
50
-`beforeMount`: Executa quando a diretiva é ligada pela primeira vez ao elemento e antes que o componente pai seja montado. Aí é onde você pode fazer o trabalho de configuração inicial.
50
51
51
52
-`mounted`: Executa quando o componente pai do elemento ligado é montado.
52
53
53
-
-`beforeUpdate`: Executa antes que os VNode contido no componente são atualizados.
54
+
-`beforeUpdate`: Executa antes que o VNode contido no componente seja atualizado.
54
55
55
-
> Nota:
56
-
> Vamos cobrir VNodes com mais detalhes [depois](render-function.html#the-virtual-dom-tree), quando discutirmos as funções de renderização (render functions).
56
+
:::tip Nota
57
+
Vamos cobrir VNodes com mais detalhes [depois](render-function.html#the-virtual-dom-tree), quando discutirmos as funções de renderização (render functions).
58
+
:::
57
59
58
-
-`updated`: Executado após os VNodes contidos no componente **e os filhos desses VNodes** terem sido atualizados.
60
+
-`updated`: Executado após o VNode contido no componente **e os VNodes de seus filhos** terem sido atualizados.
59
61
60
62
-`beforeUnmount`: Executado antes do pai dos elementos ligados sejam desmontados.
61
63
62
64
-`unmounted`: Executado apenas uma vez, quando a diretiva é desligada do elemento e o componente pai é desmontado
63
65
64
-
Você pode checar os argumentos que foram passados para esses hooks (ex: `el`, `binding`, `vnode` e `prevNode`) em [API de diretivas customizadas](../api/application-api.html#directive)
66
+
Você pode checar os argumentos que foram passados para esses hooks (ex: `el`, `binding`, `vnode` e `prevNode`) em [API de Diretivas Customizadas](../api/application-api.html#directive)
65
67
66
-
### Argumentos dinâmicos da diretiva
68
+
### Argumentos Dinâmicos de Diretiva
67
69
68
-
Os argumentos da diretiva podem ser dinâmicos. Por exemplo, em `v-minhadiretiva:[argumento]="valor"`, o `argumento` pode ser atualizado baseada nas propriedades de dados na nossa instância do componente! Isso faz nossas diretivas customizadas flexíveis para utilizar na aplicação.
70
+
Os argumentos da diretiva podem ser dinâmicos. Por exemplo, em `v-mydirective:[argument]="value"`, o `argument` pode ser atualizado baseada nas propriedades de dados na nossa instância do componente! Isso faz nossas diretivas customizadas flexíveis para utilizar na aplicação.
69
71
70
72
Digamos que você queira fazer uma diretiva customizada que permite "pregar" elementos na sua página utilizando posicionamento fixo. Nós poderiamos criar uma diretiva customizada onde o valor atualiza a posição vertical em pixels, desse jeito:
<p v-pin="200">Me pregue 200px do topo da página</p>
76
78
</div>
@@ -87,15 +89,15 @@ app.directive('pin', {
87
89
}
88
90
})
89
91
90
-
app.mount('#exemplo-argumentos-dinamicos')
92
+
app.mount('#dynamic-arguments-example')
91
93
```
92
94
93
-
Isso iria pregar o elemento 200 px do topo da página. Mas o que acontece quando encontramos um cenário que precisamos pregar um elemento da esquerda, ao invés do topo? É aqui que os argumentos dinâmicos que podem ser atualizados por instância de componente são úteis:
95
+
Isso iria pregar o elemento 200px do topo da página. Mas o que acontece quando encontramos um cenário que precisamos pregar um elemento da esquerda, ao invés do topo? É aqui que os argumentos dinâmicos que podem ser atualizados por instância de componente são úteis:
94
96
95
97
```vue-html
96
-
<div id="exemplodinamico">
98
+
<div id="dynamicexample">
97
99
<h3>Role para baixo nessa seção ↓</h3>
98
-
<p v-pin:[direction]="200">Estou pregado na página a 200 px para a esquerda.</p>
100
+
<p v-pin:[direction]="200">Estou pregado na página 200px à esquerda.</p>
A nossa diretiva customizada agora está flexível o suficiente para atender a vários casos diferentes. Para deixá-lo mais dinâmico, podemos possibilitar alterar um valor ligado. Vamos criar uma propriedade adicional `pinPadding` e ligar ao `<input type="range">`
129
+
A nossa diretiva customizada agora está flexível o suficiente para atender a vários casos diferentes. Para deixá-lo mais dinâmico, podemos possibilitar alterar um valor vinculado. Vamos criar uma propriedade adicional `pinPadding` e vincular ao `<input type="range">`
No exemplo anterior, você pode querer o mesmo comportamento no `mounted` e `updated`, mas não liga para os outros hooks. Você pode fazer isso passando a callback para a diretiva:
172
+
No exemplo anterior, você pode desejar o mesmo comportamento no `mounted` e `updated`, mas não liga para os outros gatilhos. Você pode fazer isso passando a *callback* para a diretiva:
Se a sua diretiva precisa de múltiplos valores, você também pode passar um objeto literal do javascript. Lembre-se que as diretivas pode receber qualquer expressão válida em javascript.
184
+
Se a sua diretiva precisa de múltiplos valores, você também pode passar um objeto literal do javascript. Lembre-se que as diretivas pode receber qualquer expressão Javascript válida.
When used on components, custom directive will always apply to component's root node, similarly to [non-prop attributes](component-attrs.html).
199
+
Quando usada em componentes, a diretiva customizada sempre se aplicará ao nó raiz do componente, de forma semelhante a [atributos não-prop](component-attrs.html).
198
200
199
201
```vue-html
200
202
<my-component v-demo="test"></my-component>
@@ -203,13 +205,13 @@ When used on components, custom directive will always apply to component's root
203
205
```js
204
206
app.component('my-component', {
205
207
template:`
206
-
<div> // v-demo directive will be applied here
207
-
<span>My component content</span>
208
+
<div> // a diretiva v-demo será aplicada aqui
209
+
<span>Conteúdo do meu componente</span>
208
210
</div>
209
211
`
210
212
})
211
213
```
212
214
213
-
Unlike attributes, directives can't be passed to a different element with`v-bind="$attrs"`.
215
+
Ao contrário dos atributos, as diretivas não podem ser passadas para um elemento diferente com`v-bind="$attrs"`.
214
216
215
-
With [fragments](/guide/migration/fragments.html#overview) support, components can potentially have more than one root nodes. When applied to a multi-root component, directive will be ignored and the warning will be thrown.
217
+
Com o suporte de [fragmentos](/guide/migration/fragments.html#visao-geral), os componentes podem ter potencialmente mais de um nó raiz. Quando aplicada a um componente de múltiplas raízes, a diretiva será ignorada e o aviso será lançado.
0 commit comments