# Watch
Sem claro, são Observadores de mudanças
São como as computed, mas precisa referenciar uma variável, ou seja, para ela existir a variável tem que existir no data ou na props.
Por meio dele podemos pegar o valor anterior e o novo da variável que está sendo observada, onde podemos tomar ações customizadas.
<template>
<div>
<input type="text" v-model.lazy="nome" /><br>
{{ nome }}
</div>
</template>
<script>
export default {
name: 'App',
data () {
return {
nome: 'Tonhão'
}
},
watch: {
nome(valorNovo, valorAntigo) {
console.log('valorNovo', valorNovo)
console.log('valorAntigo', valorAntigo)
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Objetos e Array não podem ser observados, para tanto podemos usar o deep.
<template>
<div>
<input type="text" v-model.lazy="nome" /><br>
{{ nome }}
</div>
</template>
<script>
export default {
name: 'App',
data () {
return {
nomes: []
}
},
watch: {
nomes: {
deep: true,
// O immediate serve para ele o watch observar imediatamente depois do carregamento da pagina, em alguns casos pode ocorrer de a propriedade receber um valor default no carregamento e depois de carregar nao alterar
immediate: true,
handler(valor) {
console.log('valor', valor)
}
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
O podemos usar uma string para definir a funcao do hander (setada no methods)
<template>
<div>
<input type="text" v-model.lazy="nome" /><br>
{{ nome }}
</div>
</template>
<script>
export default {
name: 'App',
data () {
return {
nomes: []
}
},
watch: {
nomes (valor) {
console.log('valor', valor)
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
O handler pode ser abreviado
<template>
<div>
<input type="text" v-model.lazy="nome" /><br>
{{ nome }}
</div>
</template>
<script>
export default {
name: 'App',
data () {
return {
nomes: []
}
},
methods: {
fazAlgo (value) {
console.log(value)
}
},
watch: {
nomes: {
handler: 'fazAlgo'
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27