解决vue修改对象时,视图不同步的问题

我们先来看一段代码

<p>{{testObj.a}}</p>
...
data () {
    return {
        testObj: { a: 1 }
    }
},
methods: {
    changeVal () {
          this.testObj.a = 2
          console.log(this.testObj.a)  //2
    }
}

在执行changeVal方法后,我们理想中的结果是视图中的1变成2
而事实上这样改变对象的属性值,虽然可以改变它的值,却不会触发视图的更新
正确的做法应该使用vue提供的全局方法Vue.set(在组件中可以使用this.$set)

<p>{{testObj.a}}</p>
...
data () {
    return {
        testObj: { a: 1 }
    }
},
methods: {
    changeVal () {
          this.$set( this.textObj, 'a', 2)
          console.log(this.testObj.a)  //2
    }
}

除此之外vue还提供Vue.delete(在组件中可以使用this.$delete)用于删除对象的属性

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,256评论 19 139
  • 1.安装 可以简单地在页面引入Vue.js作为独立版本,Vue即被注册为全局变量,可以在页面使用了。 如果希望搭建...
    Awey阅读 11,157评论 4 129
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,095评论 0 29
  • 也许你遇上过这样的事情: 在家里,孩子打了一下午游戏,你生气地骂:都玩一下午了,还要不要命啊?不能花点时间去学习吗...
    一颗麦稻阅读 141评论 0 0
  • “是的,你错过了一个亿。” 当然,这只是句玩笑话,不过,这句话在有些时候却很符合自己当时的心境。 这两句话最开始见...
    雪飞鹅阅读 197评论 6 3