ウォッチャー付きのコンポーネントがあります
props: {
propShow: { required: true, type: Boolean }
},
data() {
return {
show: this.propShow
}
},
watch: {
propShow: {
handler: (val, oldVal) => {
this.show = val;
}
}
}
parent
コンポーネントがpropShow
を変更するたびに、このコンポーネントはshow
プロパティを更新する必要があります。 This
コンポーネントもshow
プロパティを変更します。そのため、show
とpropShow
の両方が必要です。Vue.jsではプロパティを直接変更できないためです。
この線
this.show = val;
エラーの原因
TypeError: Cannot set property 'show' of undefined
ハンドラー内のthis
はundefined
であるためです。
どうして?
ドキュメントで警告されているように、ここではfunction
構文を使用する必要があります here :
ウォッチャーの定義にアロー関数を使用しないでください(例:searchQuery:newValue => this.updateAutocomplete(newValue))。その理由は、矢印関数が親コンテキストをバインドするため、これはVueインスタンスではなく、予想どおりthis.updateAutocompleteが未定義になるためです。
したがって、コードは次のようになります。
watch: {
propShow: {
handler: function(val, oldVal) {
this.show = val;
}
}
}