vue雙向繫結盲區
使用vue雙向繫結的時候,有時候會遇到沒有檢測到資料變化的情況,以下情況,是需要在平常工作和使用中注意的問題
陣列盲區
vue包含一組觀察陣列變異的方法,使用這些方法也會觸發檢視更新
- push()
- pop()
- shift()
- unshift()
- splice()
- sort()
- reverse()
但是受到某些限制,vue無法檢測到以下陣列變動(檢視不會更新)
<template>
<div>
<button @click="event">click</button>
{{items}}
</div>
</template>
<script>
export default {
data() {
return {
items: ['a', 'b', 'c']
}
},
methods: {
event() {
this.items[1] = 'x' // 不是響應式的
this.items.length = 2 // 不是響應式的
console.log(this.items)
}
}
}
</script>
為了解決這個問題,需要使用$set
<template>
<div>
<button @click="event">click</button>
{{items}}
</div>
</template>
<script>
export default {
data() {
return {
items: ['a', 'b', 'c']
}
},
methods: {
event() {
// this.items[1] = 'x'
// this.items.length = 2
this.$set(this.items, 1, 'x')
this.items.splice(2)
console.log(this.items)
}
}
}
</script>
物件盲區
vue不能檢測物件屬性的新增和刪除
<template>
<div>
<button @click="event">click</button>
{{items}}
</div>
</template>
<script>
export default {
data() {
return {
items: {
a: 1 // 是響應式的
}
}
},
methods: {
event() {
this.items.b = 2 // 不是響應式的
console.log(this.items)
}
}
}
</script>
這裡有兩種解決方法
- 在data宣告時,就給出b: ''的宣告
<template>
<div>
<button @click="event">click</button>
{{items}}
</div>
</template>
<script>
export default {
data() {
return {
items: {
a: 1 // 是響應式的
}
}
},
methods: {
event() {
this.$set(this.items, 'b', 2) // 是響應式的
console.log(this.items)
}
}
}
</script>
當你想新增多個新屬性到某個物件上時,也可以利用Object.assign(),但是不要直接給this.yourObject新增,例如
// 此時也不是響應的
Object.assign(vm.items, {
c: 3
})
可以直接賦值給原有物件
// 此時是響應式的
this.items = Object.assign({}, this.items, {
v: 3
})
為什麼不能實現響應式?
相關文章
- vue 雙向繫結(v-model 雙向繫結、.sync 雙向繫結、.sync 傳物件)Vue物件
- Vue雙向繫結初探Vue
- vue雙向繫結原理Vue
- 揭密 Vue 的雙向繫結Vue
- Vue、MVVM、MVC、雙向繫結VueMVVMMVC
- Vue雙向繫結實現Vue
- vue實踐:元件雙向繫結Vue元件
- vue雙向資料繫結原理Vue
- vue實現prop雙向繫結Vue
- vue v-model 雙向繫結Vue
- Vue資料雙向繫結原理Vue
- vue生命週期、雙向繫結Vue
- VUE的雙向繫結及區域性元件的使用Vue元件
- Vue雙向繫結原理,教你一步一步實現雙向繫結Vue
- vue-原始碼剖析-雙向繫結Vue原始碼
- 簡要實現vue雙向繫結Vue
- Vue 中雙向繫結 Vs 單向資料流Vue
- 淺析vue的雙向資料繫結Vue
- 剖析Vue原理&實現雙向繫結MVVMVueMVVM
- Vue原始碼學習之雙向繫結Vue原始碼
- React跟Vue不同 沒有雙向繫結ReactVue
- Vue父子元件如何雙向繫結傳值Vue元件
- vue中的雙向資料繫結原理Vue
- 梳理vue雙向繫結的實現原理Vue
- js 實現vue的雙向資料繫結JSVue
- vue資料雙向繫結的實現原理Vue
- 5分鐘教你實現Vue雙向繫結Vue
- [JS][Vue]學習記錄之雙向繫結JSVue
- Vue.js 3.x 雙向繫結原理Vue.js
- 基於vue實現的雙向資料繫結Vue
- Vue 中實現雙向繫結的 4 種方法Vue
- JS雙向資料繫結JS
- Databinding 雙向繫結詳解
- 0 到 1 掌握:Vue 核心之資料雙向繫結Vue
- 手動簡單實現Vue雙向資料繫結Vue
- vue父子關係元件間的雙向資料繫結Vue元件
- Vue父子元件雙向繫結傳值的實現方法Vue元件
- 7.vue元件(二)--雙向繫結,父子元件訪問Vue元件