<div id="app1">
<p>{{ message }}</p>
</div>
<div id="app2">
<p>{{ message }}</p>
</div>
new Vue({
el: "#app1",
data: {
message: 'インスタンス1'
}
});
new Vue({
el: '#app2',
data: {
message: 'インスタンス2'
}
})
<div id="app1">
<p>{{ message }}</p>
</div>
<div id="app2">
<p>{{ message }}</p>
<button @click="changeMessage1">インスタンス1を変更するボタン</button>
🔼別のVueインスタンスのデータプロパティを変更している
</div>
let vm1 = new Vue({
el: "#app1",
data: {
message: 'インスタンス1'
}
});
let vm2 = new Vue({
el: '#app2',
data: {
message: 'インスタンス2'
},
methods: {
changeMessage1() {
vm1.message = 'インスタンス2から変えました'
}
}
})
Vueでデータプロパティの後付けしてはいけない原則がある
Vueインスタンスのデータプロパティの動き
➡️この為、後付けしたデータプロパティはウォッチャが存在しない為、リアクティブな動きにならない
リアクティブ システム におけるウォッチャとは、setter内つまりデータが変更された時に、実行する関数になります。逆に監視プロパティと言うものは、データが変更された時に何か処理を書きたい時に使います。そういう意味では、watcherの1つに監視プロパティで定義された関数も含む、というイメージで考えていただければ大丈夫です。
もっと詳しく知りたい場合は、少し複雑ですが、こちらの公式ドキュメントを参考にしてみてください。
let x = 1; let y = x; x = 10;
とした時のyは、どうなるかというと、1のままです。もう一度y = xとする必要があります。ただしVue.jsではsetterやgetter、watcherなどを使って、x = 10とした時に、自動的に、y = xを内部的に実行してくれるようになっているというイメージです。今回でいうと、DOMの再描画が、y = xにあたります。本来であれば、el = document.querySelector(); el.textContent = 'hello'のようなことを書いて、再描画する必要があるのですが、それらを全て内部的に行ってくれており、その処理を持った関数をwatcherと言います。