vue的watcher 关于数组和对象

数组

改变原数组的几种方法可以被监听:

push pop unshift shift reverse sort splice

不改变原数组的方法不能被监听(deep:true也不能被监听,对数组无效)

slice concat filter

不能被监听到的情况(deep:true也不能被监听,对数组无效)

1、直接下标赋值(但对象直接修改原有属性值可以渲染视图,虽然也监听不到)

2、修改数组length

解决方法:

1、this.$set(this.arr,index,val)

2、push或splice等修改原数组的方法

3、直接赋值数组

对象

不能被监听的情况

1、直接添加、删除属性(删除、添加不会重新渲染视图;设置deep:true依旧监听不到)

2、直接this.obj.name = 'zz' 修改原有属性和  this.$set(this.obj,'name','zz')修改原有属性都不能监听到,但可以重新渲染视图,设置deep:true则可以监听)

解决方法:

1、this.$set()添加、this.$delete()删除属性

2、obj:{

  handler(){},

  deep:true

}

3、直接重新赋值对象

   this.obj=Object.assign({},this.obj,{lover:'song'})

4、活用computed

 https://cn.vuejs.org/v2/guide/list.html#%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9

posted on 2018-12-27 11:53  myMaria  阅读(309)  评论(0)    收藏  举报

导航