国瑞个人博客
首页 > Vue > Vue中对象的响应数据变化

Vue中对象的响应数据变化

Vue中对象的响应数据变化

 2017年06月08日 作者: 国瑞个人博客 326次浏览

在Vue中,我们只需要维护数据,而不用关心页面吗,所以经常会涉及到对对象的操作,例如在一个对象中没有该值,而需要添加该值,从而实现响应,接下来我就来介绍几种方法:

问题,给Vue中的对象添加数据的时候没有生效

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 

 
<div id="app">{{message}}
{{aiqianduan.blog}}</div>
&nbsp;

<script>
    let vm = new Vue({
        el: "#app",
        data: {    //只有计划好的数据,才能做响应reactive
            message: "天天做出好东西",
            aiqianduan: {
            }
        }
    })
    //这样做不了响应
    vm.aiqianduan.blog=1;
    console.log(vm.aiqianduan);
</script>

Vue中对象的响应数据变化

这个时候我们发现,页面中我们给对象添加的属性blog没有生效,但是控制台打印出来的信息却显示该属性存在,为什么会出现这种情况呢,这种情况是由于只有计划好的数据,才能做响应reactive,下面我们来探讨一下解决方法:

解决方法一 调用Vue的静态方法set (挂载在函数身上)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
&nbsp;

&nbsp;
<div id="app">{{message}}
{{aiqianduan.blog}}</div>
&nbsp;

<script>
    let vm = new Vue({
        el: "#app",
        data: {    //只有计划好的数据,才能做响应reactive
            message: "天天做出好东西",
            aiqianduan: {
            }
        }
    })
    //语法:Vue.set(target,prop,value)  参数1:目标对象  参数二:属性  参数3: 值
    Vue.set(vm.aiqianduan,"blog","我是爱前端博客");
    console.log(vm.aiqianduan);
</script>

解决方法二 调用实例上的方法 $set (挂载在实例身上)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
&nbsp;

&nbsp;
<div id="app">{{message}}
{{aiqianduan.blog}}</div>
&nbsp;

<script>
    let vm = new Vue({
        el: "#app",
        data: {    //只有计划好的数据,才能做响应reactive
            message: "天天做出好东西",
            aiqianduan: {
            }
        }
    })
    //语法:Vue.$set(target,prop,value)  参数1:目标对象  参数二:属性  参数3: 值
    //解决方法二  调用实例上的方法 $set (挂载在实例身上)
    vm.$set(vm.aiqianduan,"blog","我是爱前端博客");
    console.log(vm.aiqianduan);
</script>

解决方法三 改写属性的值,重新赋值

1
vm.aiqianduan = {blog:"新的"}; //会将原来对象的属性都覆盖掉

不过有弊端,原来所有的值都会被覆盖掉

解决方法四 使用Object.assign合并多个对象为一个对象

1
2
vm.aiqianduan = Object.assign({}, vm.aiqianduan, { blog: "爱前端博客" });
console.log(vm.aiqianduan);

上述代码表示的就是将增加数据的对象和增加的数据统统添加到一个新的对象中,在将新的对象赋值给vue中那个需要添加数据的对象

这里还有一个误区,如下所示:
1
2
3
 //相当于是给vm.aiqianduan这个对象添加一个属性,对象有这个值,但是不会响应
var o = Object.assign(vm.aiqianduan, { blog: "爱前端博客" });
console.log(o === vm.aiqianduan); //true 表示他们是同一个对象

在上述例子中,我们发现,他们的值也是相等的,但是为什么页面就是没有展现出来呢,因为数据不是开始就有的,而是后面添加的,只有计划好的数据,才能做响应reactive

静态方法和原型方法

静态方法是挂载在函数上的方法,调用的时候通过函数调用

原型上的方法,需要通过实例调用

百度已收录

点击快速分享:

以上就是国瑞前端个人博客带来的是《Vue中对象的响应数据变化》,感谢您的观看!

如果没有特殊的说明,本文即为国瑞前端博客原创(www.huanggr.cn),欢迎读者转载并保留本站版权!https://www.huanggr.cn/84.html

「专业前端博客,如果觉得我的文章对您有用,请帮助本站成长」

赞( 45 ) 打赏

谢谢你请我吃鸡腿*^_^*

支付宝
微信
45

谢谢你请我吃鸡腿*^_^*

支付宝
微信
标签:

上一篇:

下一篇:

相关文章:

共有 0 条评论

博客简介

国瑞个人博客: https://www.huanggr.cn/,我们关注Web前端开发技术,web前端开发,移动前端开发,前端资讯,同时分享前端资源和工具等,期待你的参与,了解更多..

博主独立研发主题:

本站唯一QQ群

加入国瑞个人博客QQ群

本群为学习探讨群,主要和前端相关,欢迎广大前端(抱有学习目的均可)爱好者加入!广告请勿添加!

升级版本

web前端开发博客,基于vue脚手架制作的前端博客正在制作中,尽情期待,目前示例的代码位于此处

最新版本(尽请期待)-web前端开发博客

精彩评论

本站主要提供服务

二年web前端开发博客,本站专注提供web资源下载,技术问题解答,经验分享,也提供新手的web技术指导,二年前端个人博客,期待你的加入!

站点统计

  • 文章总数: 269 篇
  • 草稿数目: 50 篇
  • 分类数目: 26 个
  • 页面总数: 16 个
  • 评论总数: 216 条
  • 链接总数: 10 个
  • 标签总数: 104 个
  • 建站时间: 803 天
  • 注册用户: 659 人
  • 访问总量: 8780669 次
  • 最近更新: 2019年7月15日
-->