Vue.js Validando propriedades
O props
O primeiro nível de validação pode ser feito definindo o tipo esperado para cada propriedade. Os tipos suportados incluem String
Number
Boolean
Function
Object
Array
Symbol
Date
Os props
A primeira maneira é definir uma lista simples:
app.component('user', {
props: ['name', 'age'],
template: '<div><h2>User</h2><p>Name: {{ name }}</p><p>Age: {{ age }}</p></div>'
});
No entanto, props
app.component('user', {
props: { name: String, age: Number },
template: '<div><h2>User</h2><p>Name: {{ name }}</p><p>Age: {{ age }}</p></div>'
});
Neste caso, name
age
props
O código abaixo demonstra essa validação em funcionamento:
<!DOCTYPE html>
<html>
<head>
<title>Componentes Vue.js</title>
<meta charset="utf-8" />
<script src="https://unpkg.com/vue"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="name" /><br><br>
<input type="number" v-model.number="age" /><br><br>
<user :name="name" :age="age"></user>
</div>
<script>
const app = Vue.createApp({
data() {
return { name: '', age: 18 };
}
});
app.component('user', {
props: { name: String, age: Number },
template: '<div><h2>User</h2><p>Name: {{ name }}</p><p>Age: {{ age }}</p></div>'
});
app.mount('#app');
</script>
</body>
</html>

Validação avançada
Para um controle mais rigoroso, é possível definir parâmetros adicionais:
: especifica o tipo de dado esperado.type
: determina se arequired
é obrigatória (prop
outrue
).false
: define um valor padrão quando nenhum valor é passado.default
: função que valida o valor davalidator
. Se retornarprop
, o valor é aceito; se retornartrue
, o Vue exibe um aviso.false
No exemplo abaixo, essas validações são aplicadas:
<!DOCTYPE html>
<html>
<head>
<title>Componentes Vue.js</title>
<meta charset="utf-8" />
<script src="https://unpkg.com/vue"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="name" /><br><br>
<input type="number" v-model.number="age" /><br><br>
<user :name="name" :age="age"></user>
</div>
<script>
const app = Vue.createApp({
data() {
return { name: '', age: 18 };
}
});
app.component('user', {
props: {
name: {
type: String,
required: true,
default: 'Tom',
validator: function(value) {
return value !== 'admin' && value !== '';
}
},
age: {
type: Number,
required: true,
default: 18,
validator: function(value) {
return value >= 0 && value < 100;
}
}
},
template: '<div><h2>User</h2><p>Name: {{ name }}</p><p>Age: {{ age }}</p></div>'
});
app.mount('#app');
</script>
</body>
</html>
Neste caso:
é obrigatório e recebename
como valor padrão. A validação impede que'Tom'
ou uma string vazia sejam utilizados.'admin'
é obrigatório e recebeage
como padrão. A validação restringe o valor ao intervalo entre18
e0
.99

É importante observar que a validação ocorre antes da criação do objeto do componente. Isso significa que propriedades definidas dentro de data()
computed
methods
default
validator