JSON
オブジェクトを使用する必要はありません。
const child = {
props:["user"],
data(){
return {
localUser: Object.assign({}, this.user)
}
}
}
使用localUser
(または何でもあなたはそれを呼びたい)あなたの子供の内部。
編集
私は上記のコンセプトを実証するために、この質問に別の答えのために作成したフィドルを変更していたし、@のuser3743266が
を尋ねた私はこれでグリップに自分自身を来て、そして私ですこれを見つけるのは非常に です。あなたの例はうまくいきます。子では、 という要素をデータに作成して、小道具のコピーを取り、子は をコピーします。面白くて便利ですが、... 親が 親を変更した場合、ローカルコピーが更新されるとわかりません。 v-ifsを削除して、すべてが と表示され、編集コンポーネントが複製されるように、私はあなたのフィドルを修正しました。 1つの コンポーネントで名前を変更すると、もう1つは孤立して変更されません。
現在のコンポーネントは次のようになります。私は、ユーザーのローカルコピーを使用するための設計上の決定をしたので
Vue.component('edit-user', {
template: `
<div>
<input type="text" v-model="localUser.name">
<button @click="$emit('save', localUser)">Save</button>
<button @click="$emit('cancel')">Cancel</button>
</div>
`,
props: ['user'],
data() {
return {
localUser: Object.assign({}, this.user)
}
}
})
user3743266が正しい@、コンポーネントが自動的に更新されません。 プロパティuser
が更新されますが、localUser
は更新されません。この場合、の場合は、プロパティが変更されたときにローカルデータを自動的に更新したい場合は、ウォッチャーが必要です。
Vue.component('edit-user', {
template: `
<div>
<input type="text" v-model="localUser.name">
<button @click="$emit('save', localUser)">Save</button>
<button @click="$emit('cancel')">Cancel</button>
</div>
`,
props: ['user'],
data() {
return {
localUser: Object.assign({}, this.user)
}
},
watch:{
user(newUser){
this.localUser = Object.assign({}, newUser)
}
}
})
ここでは、fiddleが更新されています。
これにより、ローカルデータが更新または発行される時期を完全に制御できます。たとえば、ローカル状態を更新する前に条件をチェックすることができます。
watch:{
user(newUser){
if (condition)
this.localUser = Object.assign({}, newUser)
}
}
私が他の場所で述べたように、あなたは、オブジェクトのプロパティが変更可能であることの利点を活用することがあります時間がありますが、あなたはより多くの制御が必要になる場合があります。このような時もあります。
@ user3743266いくつかの説明を追加しました。 – Bert
とてもいいです。とても面白かったです。ありがとうございました。 Vueは私のおばあちゃんを揺るがす。私はEvanあなたが現実には30人のロケット科学者のチームであると思います。 – bbsimonbb
本当ですか?私は、このスレッドとあなたの答えは、価値のトンを持っていると言うでしょう。このような質問は、vueを使用するすべての人に潜在的に関連しています。それを残すと、長くて驚くべき人生を送ることができます。 – bbsimonbb