Observadores (Watchers) - Vue.js
Além das propriedades computadas, o Vue.js permite a definição de observadores, conhecidas como watchers. Essas propriedades são amplamente utilizadas para executar ações assíncronas, especialmente aquelas que podem levar mais tempo, como o envio de solicitações para servidores.
Considere o exemplo abaixo de uma página web:
<!DOCTYPE html>
<html>
<head>
<title>Exemplo Assíncrono com Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<p>Insira sua idade: <input v-model="age"></p>
<p>{{ result }}</p>
</div>
<script>
Vue.createApp({
data() {
return {
age: '',
result: ''
};
},
watch: {
age: async function(newAge) {
if (newAge > 0 && newAge < 110) {
this.result = 'Verificando sua idade...';
try {
const response = await this.validateAge(newAge);
this.result = response;
} catch (error) {
this.result = 'Erro ao validar a idade: ' + error.message;
}
} else {
this.result = 'Idade inválida. Por favor, insira um valor entre 1 e 110.';
}
}
},
methods: {
async validateAge(age) {
// Simula uma chamada a um servidor com tempo de resposta de 2 segundos
return new Promise((resolve, reject) => {
setTimeout(() => {
if (age >= 18) {
resolve('Acesso permitido');
} else {
resolve('Acesso negado para menores de 18 anos.');
}
}, 2000);
});
}
}
}).mount('#app');
</script>
</body>
</html>
No código acima, o parâmetro watch
age
data
age
newAge
A função vinculada ao watcher verifica se o novo valor está dentro de uma faixa válida antes de chamar o método validateAge
result
result
Quando o valor no campo de texto é alterado, o sistema exibe primeiro a mensagem de carregamento:
Após 2 segundos, a mensagem é atualizada com o resultado da validação da idade inserida: