最近項目有點忙碌,遇到好多問題都沒有總結(╥﹏╥),在開發過程當中,取vuex
中的數組渲染完成以後,再次修改數組的值,數據更新了,可是視圖並無更新。覺得是數組更新
的問題,後來又覺得是由於vuex
致使的問題. 最後強制刷新組件解決了問題,可是尚未找到根本問題的所在...html
push()
、pop()
、shift()
、unshift()
、splice()
、sort()
、reverse()
、filter()
、concat()
方法時,改變數組的同時能夠觸發視圖的變化。(1)直接操做數組的長度;vue
// Vue.set this.$set(arr, indexOfItem, newValue) // Array.prototype.splice this.arr.splice(indexOfItem, 1, newValue)
(2)利用索引直接設置一個項時,例如:this.arr[indexOfItem] = newValuevuex
this.arr.splice(newLength)
demo以下:api
<template> <div class="demo"> <div class="list-item" v-for="item in arr[0].elements" :key="item.name">{{item.name}}</div> <div class="change-btn" @click="changeArr">改變列表的值</div> </div> </template> <script> export default { data() { return { index: 0, arr: [{ elements: [{ name: '0' }, { name: '1' }, { name: '2' }] }] } }, methods: { changeArr() { // 能夠改變數組的值 this.arr[0].elements.push({ name: '3' }) // this.arr[0].elements[1].name = '4' 能夠改變數組的值 // this.arr[0].elements[1] = { 沒法改變數組的值 // name: '4' // } } } } </script>
方法一:this.$set()
數組
方法二:Object.assign()
ide
demo.vueui
<template> <div class="demo"> {{object}} <div class="change-btn" @click="changeArr">改變列表的值</div> </div> </template> <script> export default { data() { return { index: 0, object: { name: 'haha' } } }, methods: { changeArr() { // 方法一: this.$set(this.object, 'age', 27) // 方法二: this.object = Object.assign({}, this.object, { age: 27 }) // 方法三: ---不可行 this.object.age = '27' } } } </script>
補充:
this.$forceUpdate()迫使 Vue 實例從新渲染。注意它僅僅影響實例自己和插入插槽內容的子組件,而不是全部子組件。
使用 v-if 在切換時,元素及它的綁定數據和組件都會被銷燬並重建this
https://cn.vuejs.org/v2/api/#...
https://cn.vuejs.org/v2/guide...prototype