vue 改变数组里的布尔值页面上没有改变

demo在这里http://jsfiddle.net/mtcv824d/

<div id="app">
  <div @click="change(0)">
  {{arr[0]}}
  </div>
</div>
new Vue({
  el: "#app",
  data: {
    arr: [true, false, false]
  },
  methods: {
      change: function(index){
      alert(this.arr[index])
        this.arr[index] = !this.arr[index]
      alert(this.arr[index])
    }
  }
})

方法中输出发现值改变了,但页面上却没有变化,是什么原因呢?

阅读 7k
5 个回答

文档有写:
由于 JavaScript 的限制,Vue 不能检测以下变动的数组:

当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue
当你修改数组的长度时,例如:vm.items.length = newLength

https://cn.vuejs.org/v2/guide...

你需要深拷贝一下

// 类似于
this.arr[index] = JSON.parse(JSON.stringify(this.arr[index]))

函数关键代码可以采用下面两种中的一种,数组下标直接赋值的话vue监听不到数据更新。

      this.arr.splice(index, 1, !this.arr[index])
      this.$set(this.arr, index, !this.arr[index])

this.$set(this.arr,index,ture/false)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题