Skip to content

Commit 682a2b4

Browse files
committed
Review on guide/custom-directive
1 parent ee907b5 commit 682a2b4

File tree

1 file changed

+37
-35
lines changed

1 file changed

+37
-35
lines changed

src/guide/custom-directive.md

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
1-
# Diretivas customizadas (Custom Directives)
1+
# Diretivas Customizadas
22

33
## Introdução
44

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:
66

77
<common-codepen-snippet title="Diretivas customizadas: exemplo básico" slug="JjdxaJW" :preview="false" />
88

9-
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.
1010

1111
Agora vamos construir a diretiva que faz isso:
1212

1313
```js
1414
const app = Vue.createApp({})
15-
// Registar uma diretiva customizada e global chamada `v-focus`
15+
// Registra uma diretiva customizada global chamada `v-focus`
1616
app.directive('focus', {
17-
// Quando o elemento é montado ao DOM
17+
// Quando o elemento vinculado é inserido no DOM
1818
mounted(el) {
1919
// Foca o elemento
2020
el.focus()
2121
}
2222
})
2323
```
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`:
2526

2627
```js
2728
directives: {
@@ -34,43 +35,44 @@ directives: {
3435
}
3536
```
3637

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:
3839

3940
```html
4041
<input v-focus />
4142
```
4243

43-
## Funções de hook (Hook Functions)
44+
## Funções de Gatilhos (Hook Functions)
4445

4546
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):
4647

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.
4849

4950
- `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.
5051

5152
- `mounted`: Executa quando o componente pai do elemento ligado é montado.
5253

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.
5455

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+
:::
5759

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.
5961

6062
- `beforeUnmount`: Executado antes do pai dos elementos ligados sejam desmontados.
6163

6264
- `unmounted`: Executado apenas uma vez, quando a diretiva é desligada do elemento e o componente pai é desmontado
6365

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)
6567

66-
### Argumentos dinâmicos da diretiva
68+
### Argumentos Dinâmicos de Diretiva
6769

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.
6971

7072
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:
7173

7274
```vue-html
73-
<div id="exemplo-argumentos-dinamicos" class="demo">
75+
<div id="dynamic-arguments-example" class="demo">
7476
<p>Role para baixo</p>
7577
<p v-pin="200">Me pregue 200px do topo da página</p>
7678
</div>
@@ -87,15 +89,15 @@ app.directive('pin', {
8789
}
8890
})
8991

90-
app.mount('#exemplo-argumentos-dinamicos')
92+
app.mount('#dynamic-arguments-example')
9193
```
9294

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:
9496

9597
```vue-html
96-
<div id="exemplodinamico">
98+
<div id="dynamicexample">
9799
<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>
99101
</div>
100102
```
101103

@@ -124,10 +126,10 @@ Resultado:
124126

125127
<common-codepen-snippet title="Diretivas customizadas: argumentos dinâmicos" slug="YzXgGmv" :preview="false" />
126128

127-
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">`
128130

129131
```vue-html{4}
130-
<div id="exemplodinamico">
132+
<div id="dynamicexample">
131133
<h2>Role a página para baixo</h2>
132134
<input type="range" min="0" max="500" v-model="pinPadding">
133135
<p v-pin:[direction]="pinPadding">Me pregue {{ pinPadding + 'px' }} da {{ direction || 'top' }} da página</p>
@@ -165,9 +167,9 @@ Resultado:
165167

166168
<common-codepen-snippet title="Diretivas customizadas: argumentos dinâmicos + vínculo dinâmico" slug="rNOaZpj" :preview="false" />
167169

168-
## Atalho de função (Function Shorthand)
170+
## Atalho da Função (Function Shorthand)
169171

170-
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:
171173

172174
```js
173175
app.directive('pin', (el, binding) => {
@@ -177,24 +179,24 @@ app.directive('pin', (el, binding) => {
177179
})
178180
```
179181

180-
## Objetos literais (Object Literals)
182+
## Objetos Literais (Object Literals)
181183

182-
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.
183185

184186
```vue-html
185-
<div v-demo="{ color: 'white', text: 'ola!!' }"></div>
187+
<div v-demo="{ color: 'white', text: 'olá!!' }"></div>
186188
```
187189

188190
```js
189191
app.directive('demo', (el, binding) => {
190192
console.log(binding.value.color) // => "white"
191-
console.log(binding.value.text) // => "ola!"
193+
console.log(binding.value.text) // => "olá!"
192194
})
193195
```
194196

195-
## Utilização nos componentes
197+
## Uso em Componentes
196198

197-
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).
198200

199201
```vue-html
200202
<my-component v-demo="test"></my-component>
@@ -203,13 +205,13 @@ When used on components, custom directive will always apply to component's root
203205
```js
204206
app.component('my-component', {
205207
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>
208210
</div>
209211
`
210212
})
211213
```
212214

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"`.
214216

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

Comments
 (0)