我正在嘗試同步vue.js中父母和子女之間的道具。在Vuejs中同步道具
我有一個父組件,其中包含一個帶有prop的子組件。當父母中的道具改變時,道具在小孩中更新,並且道具在小孩中改變時,父母被更新。
我開始用這個例子:
在我的組件安裝
<div>
<div id="app">
</div>
</div>
HTML和家長+孩子:
Vue.component('myinput', {
template: '<div><input v-model="mytext" /></div>',
props: ['text'],
data() {
return {
mytext: this.text
}
}
})
const vm = new Vue({
el: '#app',
template: '<div> <myinput :text="mytext"></myinput> <p> {{mytext}} </p></div>',
data() {
return {
mytext: "Hello World!"
}
}
});
既然不能發生變異的道具,我需要本地副本 [Example Codepen]。
如果我想讓我的父組件在孩子更改時更新,我需要$emit
的值。
對於這一點,我在孩子組件創建圍繞mytext
包裝:
computed: {
wrapperMyText: {
get() {
return this.mytext;
},
set(v) {
this.mytext = v;
this.$emit('update:text', v);
}
}
我在模型中使用wrapperMyText。 [Example Codepen]
現在,如果我想以另一種方式(父母對孩子)的綁定,我需要在孩子中添加一個觀察者。
watch: {
text(v) {
this.mytext = v;
}
},
在這個例子中,只有一個道具,我需要創建一個觀察者和一個計算屬性。如果我有5個屬性,我需要5個觀察者和5個計算屬性。這意味着組件代碼被所有這些東西污染(代碼太多)。所以我的問題是:
這是同步道具的標準模式?
在這種情況下使用Store(比如vuex)更好嗎?
爲什麼有這麼多的代碼需要做一個簡單的情況?
經過反思,似乎我試圖用屬性重新編碼v模型。
正是我在找的東西,謝謝:) – Epitouille
昨天他問了同樣的問題,我用小提琴評論過,因爲我不能完全理解這個問題。他說他解決了這個問題,因爲這個問題是其他問題。 https://stackoverflow.com/q/45323183/7814783 ..... + 1 :) –
你好@VamsiKrishna也許它看起來同樣的問題,但它不是:)我開始學習Vuejs,所以我混淆了很多現在的事情。無論如何感謝您的評論 – Epitouille