computed计算属性监听不到数组元素变化的问题

简单记录一下这次遇到的问题

在methods中的某个事件会改变arr数组中的元素

clickBtn () {
  this.arr[0] = false
}

 

但在computed中监听不到这个数组中元素的变化,

isAble() {
  if (this.arr[i]) {
    return true;
  }
  return false;
}

解决办法就是在methods中这样写

clickBtn () {
  this.$set(this.arr, 0 ,false)
}

这样computed就可以检测到啦

this.$set()的官方解释是这样的

向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新属性,因为 Vue 无法探测普通的新增属性 (比如 this.myObject.newProperty = 'hi')

https://cn.vuejs.org/v2/api/#Vue-set

补充:

当你给你个对象添加一个属性之后在控制台可以输出,但视图没有更新,这个时候就需要用到this.$set()了

这种情况也可以在方法中的第一行添加这样一句

this.$forceUpdate();

这样可以进行视图层重新渲染

posted @ 2020-03-22 23:50  万变不离许嵩  阅读(7189)  评论(0编辑  收藏  举报