Compartilhando Dados entre Componentes no Vue.js
No Vue.js, cada componente pode ter seus próprios dados internos, mas também é possível compartilhar um conjunto de dados entre vários componentes. A forma como os dados são definidos na função data()
Componentes com Dados Independentes
Quando data()
counter
count
<!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">
<counter></counter>
<counter></counter>
</div>
<script>
const app = Vue.createApp({});
app.component('counter', {
data() {
return {
header: 'Counter Program',
count: 0
};
},
template: `<div>
<h2>{{ header }}</h2>
<button v-on:click="increase">+</button>
<span>{{ count }}</span>
</div>`,
methods: {
increase() {
this.count++;
}
}
});
app.mount('#app');
</script>
</body>
</html>
Como data()
count

Componentes com Dados Compartilhados
Se data()
counter
globalData
<!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">
<counter></counter>
<counter></counter>
</div>
<script>
let globalData = {
header: 'Counter Program',
count: 0
};
const app = Vue.createApp({});
app.component('counter', {
data() {
return globalData;
},
template: `<div>
<h2>{{ header }}</h2>
<button v-on:click="increase">+</button>
<span>{{ count }}</span>
</div>`,
methods: {
increase() {
this.count++;
}
}
});
app.mount('#app');
</script>
</body>
</html>
Neste caso, todas as instâncias do componente compartilham a mesma referência ao objeto globalData
count

Escolhendo entre Dados Independentes e Compartilhados
A escolha entre dados independentes ou compartilhados depende do comportamento desejado:
Se cada instância do componente precisa gerenciar seus próprios dados sem interferência externa,
deve retornar um novo objeto para cada instância.data()
Se os dados precisarem ser sincronizados entre várias instâncias, um objeto externo pode ser usado para armazená-los e ser referenciado pelos componentes.