Vue.js Componentes Pai e Filho
No Vue.js, um componente pode conter outros componentes internos. O componente pai organiza e gerencia os componentes filhos, permitindo uma melhor separação da lógica e da estrutura da aplicação.
A seguir, um exemplo onde um componente exibe uma lista de objetos, enquanto outro componente é responsável por exibir cada item individualmente:
<!DOCTYPE html>
<html>
<head>
<title>Componentes Vue.js</title>
<meta charset="utf-8" />
<script src="https://unpkg.com/vue"></script>
<style>
.userdetails {
border-bottom: 1px solid #888;
}
</style>
</head>
<body>
<div id="app">
<users-list :users="users"></users-list>
</div>
<script>
const app = Vue.createApp({
data() {
return {
users: [
{ name: 'Tom', age: 18 },
{ name: 'Bob', age: 23 },
{ name: 'Alice', age: 21 }
]
};
}
});
app.component('user-details', {
props: ["user"],
template: `<div class="userdetails">
<p>Name: {{ user.name }}</p>
<p>Age: {{ user.age }}</p>
</div>`
});
app.component('users-list', {
props: ["users"],
template: `<div>
<user-details v-for="user in users" :key="user.name" :user="user"></user-details>
</div>`
});
app.mount('#app');
</script>
</body>
</html>
O componente users-list
users
user-details
v-for
user
user-details
Embora fosse possível definir toda a lógica dentro de um único componente, separar user-details
user-details
users-list

Registro Global e Local de Componentes
No exemplo anterior, os componentes foram registrados globalmente por meio do método app.component()
user-details
Também é possível registrar um componente localmente. No exemplo abaixo, user-details
const userDetailsComponent = {
props: ["user"],
template: `<div class="userdetails">
<p>Name: {{ user.name }}</p>
<p>Age: {{ user.age }}</p>
</div>`
};
const app = Vue.createApp({
data() {
return {
users: [
{ name: 'Tom', age: 18 },
{ name: 'Bob', age: 23 },
{ name: 'Alice', age: 21 }
]
};
},
components: {
'user-details': userDetailsComponent
}
});
Nesse caso, user-details
users-list
Uma alternativa é registrar user-details
users-list
O objeto components
users-list
userDetailsComponent
"user-details"
user-details
users-list