vue配列オブジェクトがページ表示を変更してもリフレッシュの問題はありません
注意事項
JavaScriptの制限により、Vueは以下の変動する配列を検出できません.インデックスを使用して直接アイテムを設定する場合、たとえば 配列の長さを変更すると、例えば、 例を挙げます.
第1の問題を解決するために、以下の2つの方法は、
グローバルメソッド
2つ目の問題を解決するには、
オブジェクト変更検出の注意
それともJavaScriptの制限のため、Vueはオブジェクト属性の追加または削除を検出できません:
作成したインスタンスに対して、Vueはルートレベルのレスポンス属性を動的に追加できません.ただし、
ネストされた
また、
あなたはそうすべきです.
vue公式サイトを抜粋
JavaScriptの制限により、Vueは以下の変動する配列を検出できません.
vm.items[indexOfItem] = newValue
vm.items.length = newLength
var vm = new Vue({
data: {
items: ['a', 'b', 'c']
}
})
vm.items[1] = 'x' //
vm.items.length = 2 //
第1の問題を解決するために、以下の2つの方法は、
vm.items[indexOfItem] = newValue
と同じ効果を達成し、同時に状態更新をトリガすることができる.// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)
グローバルメソッド
vm.$set
の別名であるVue.set
のインスタンスメソッドも使用できます.vm.$set(vm.items, indexOfItem, newValue)
2つ目の問題を解決するには、
splice
を使用します.vm.items.splice(newLength)
オブジェクト変更検出の注意
それともJavaScriptの制限のため、Vueはオブジェクト属性の追加または削除を検出できません:
var vm = new Vue({
data: {
a: 1
}
})
// `vm.a`
vm.b = 2
// `vm.b`
作成したインスタンスに対して、Vueはルートレベルのレスポンス属性を動的に追加できません.ただし、
Vue.set(object, key, value)
メソッドを使用してネストされたオブジェクトに応答属性を追加することができます.たとえば、次のようになります.var vm = new Vue({
data: {
userProfile: {
name: 'Anika'
}
}
})
ネストされた
age
オブジェクトに新しいuserProfile
プロパティを追加できます.Vue.set(vm.userProfile, 'age', 27)
また、
vm.$set
のインスタンスメソッドを使用することもできます.これは、グローバルVue.set
の別名にすぎません.vm.$set(vm.userProfile, 'age', 27)
Object.assign()
または_.extend()
を使用するなど、既存のオブジェクトに複数の新しい属性を付与する必要がある場合があります.この場合、2つのオブジェクトのプロパティで新しいオブジェクトを作成する必要があります.新しいレスポンス属性を追加したい場合は、次のようにしないでください.Object.assign(vm.userProfile, {
age: 27,
favoriteColor: 'Vue Green'
})
あなたはそうすべきです.
vm.userProfile = Object.assign({}, vm.userProfile, {
age: 27,
favoriteColor: 'Vue Green'
})
vue公式サイトを抜粋