一個想法是有一個根組件管理兩個對等體之間的通信,使您的p年齡是這樣的:
<div id="root">
<app></app>
<users></users>
<div>
有了這個開端,下一步可以通過道具來傳遞語言環境的用戶:
<div id="root">
<app></app>
<users :locale="rootLocale"></users>
<div>
要更新rootLocale
,我們可以偵聽由應用程序發出的事件:
<div id="root">
<app @locale-changed="localeChanged"></app>
<users :locale="rootLocale"></users>
<div>
將其組合在一起,這裏的組件定義:
var app = {
name: 'app',
template:
`<select v-model="locale">
<option value="en">English</option>
<option value="pl">Polski</option>
</select>`,
data: function() {
return {
locale: "en"
}
},
watch: {
locale: function() {
this.$emit('locale-changed', this.locale);
}
},
};
var users = {
name: 'users',
template:
`<div>
<div>{{message}}</div>
<div>{{locale}}</div>
</div>`,
props: ['locale'],
data: function() {
return {
message: 'awaiting change'
}
},
watch: {
locale: function() {
this.message = 'locale changed'
}
}
};
這裏是根元素:
var vm = new Vue({
el: "#root",
components: { app, users },
data: function() {
return {
rootLocale: ''
}
},
methods: {
localeChanged: function (val) {
this.rootLocale = val;
}
}
});
完整的示例是JsFidde:https://jsfiddle.net/zfp5rLb7/1/
是否回答你的問題?
可能考慮使用總線進行數據同步,或使用vuex(https://vuejs.org/v2/guide/components.html#Non-Parent-Child-Communication) –