最近项目有点忙碌,遇到好多问题都没有总结(╥﹏╥),在开发过程当中,取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