问题描述

Vue的data使用有坑啊,它不能直接修改创建的对象的属性,例如想要给 user 添加一个 name 属性,值是 Jay 。

先来一个添加的错误示例(这是一个大坑,请注意),这样写页面不渲染,但是属性添加到了user对象,所以不会报错。

Java

mounted() { this.user.name='Jay'; } //错误示例

1

mounted(){this.user.name='Jay';}//错误示例

作为一个后端开发,被这个问题困扰了一下午,-_-||

下面介绍几种正确有效的写法

解决方法一

强制刷新数据。 这里用了 $forceUpdate() ,它可以强制刷新数据。

mounted() {

this.user.name='Jay';

this.$forceUpdate();

} //正确示例

1

2

3

4

mounted(){

this.user.name='Jay';

this.$forceUpdate();

}//正确示例

解决方法二

重写整个对象。因为在 data 里面创建了 user 对象,可以直接修改它,缺点是得重写整个对象。

mounted() {

this.user={

Age:25,

name:'Jay'

}

} //正确示例

1

2

3

4

5

6

mounted(){

this.user={

Age:25,

name:'Jay'

}

}//正确示例

解决方法三

重要知识点。Vue.set 方法。用于设置对象的属性,它可以解决 Vue 无法检测添加属性的限制,语法格式如下:

Vue.set( target, key, value )

1

Vue.set(target,key,value)

参数说明

target: 可以是对象或数组

key : 可以是字符串或数字

value: 可以是任何类型

使用代码示例

new Vue({

el: '#app',

data:{

a:{b:1}

},

mounted() {

this.$set(this.a, 'bb', 121);

}

})

1

2

3

4

5

6

7

8

9

newVue({

el:'#app',

data:{

a:{b:1}

},

mounted(){

this.$set(this.a,'bb',121);

}

})

在Vue中,一般只有在data选项中声明的属性(或者是属性的属性)才是具有响应特性的。如果需要在data选项之外对已有属性添加(Vue 不允许动态添加根级响应式属性)具有响应特性的属性,需要用到Vue的set方法。

var vm = new Vue({

data: {

a: { //a就是根级属性,不可动态添加

b: 0 //b就是属性的属性,可以动态添加

}

}

})何为响应特性?就是当我们更改data中的值的时候,HTML与之绑定的部分会随之更新的特性。

1

2

3

4

5

6

7

varvm=newVue({

data:{

a:{//a就是根级属性,不可动态添加

b:0//b就是属性的属性,可以动态添加

}

}

})何为响应特性?就是当我们更改data中的值的时候,HTML与之绑定的部分会随之更新的特性。

Vue文档中的例子

var vm = new Vue({

data: {

a: 1

}

})

// `vm.a` 现在是响应式的

vm.b = 2

// `vm.b` 不是响应式的

1

2

3

4

5

6

7

8

varvm=newVue({

data:{

a:1

}

})

// `vm.a` 现在是响应式的

vm.b=2

// `vm.b` 不是响应式的

上例中的a就是在data中声明的具有响应特性的属性,而b就不是。

把上面的例子修改一下

var vm = new Vue({

data: {

a: {

a1:''

}

},

methods: {

change: function () {

this.a.a1 = "test" //a1就是响应式的

this.a.a2 = "testtest" //a2就不是响应式的

}

}

})

1

2

3

4

5

6

7

8

9

10

11

12

13

varvm=newVue({

data:{

a:{

a1:''

}

},

methods:{

change:function(){

this.a.a1="test"//a1就是响应式的

this.a.a2="testtest"//a2就不是响应式的

}

}

})

在实际操作中,上例的a2虽然不是响应式的,但他却是可以在HTML部分被渲染更新出来。这里就是一个比较容易掉进去的坑了。由于Vue是异步执行DOM更新,虽然更新的动作是由this.a.a1 = “test”触发,可动作的完成是在this.a.a2 = “testtest”之后。

总结

最后我是用this.$set(this.a, ‘bb’, 121);这种方法来解决页面data属性没刷新的问题。

浏览量:

53

0

vue更新data中的数据页面不渲染_vue更新obj类data的属性无效,页面data没刷新解决方法vue.set...相关推荐

  1. Vue 在beaforeCreate时获取data中的数据

    众所周知,vue在beforecreate时期是获取不到data中的 数据的 但是通过一些方法可以实现在beforecreate时获取到data中的数据 暂时想到两种放发可以实现,vue在before ...

  2. mouted能不能访问data中的数据_Vue(定时器)解决mounted不能获取到data中的数据问题...

    vue中data定义 data() { return { isok:10, } } 在vue中使用定时器 如下 mounted是钩子函数 mounted(){ console.log(this.iso ...

  3. pandas基于条件判断更新dataframe中所有数据列数值内容的值(Conditionally updating all values in pandas Dataframe )

    pandas基于条件判断更新dataframe中所有数据列数值内容的值(Conditionally updating all values in pandas Dataframe ) 目录

  4. pandas基于条件判断更新dataframe中特定数据列数值内容的值(Conditionally updating values in specific pandas Dataframe )

    pandas基于条件判断更新dataframe中特定数据列数值内容的值(Conditionally updating values in specific pandas Dataframe ) 目录

  5. Mysql更新字段中部分数据的方法

    如果现在需要Mysql更新字段重部分数据,而不是全部数据,应该采用何种方法呢?下面介绍了两种情况下Mysql更新字段中部分数据的方法,供您参考. Mysql更新字段中部分数据第一种情况: update ...

  6. filters获取data中的数据

    第一种方式:申明全局变量,改变this方法. 在对应的组件中申明全局变量 在beforeCreated申明周期中修改this的指向,并在filters中使用.就可以获取data中申明的options数 ...

  7. Mysql 两种情况下更新字段中部分数据的方法

    Mysql更新字段中部分数据的两种情况在下文给予详细的解决方法,感兴趣的朋友可以参考下哈 Mysql更新字段中部分数据第一种情况: 代码如下: update tab set A = concat(su ...

  8. MySQL数据库-更新表中的数据详解

    更新书记记录是数据操作中常见的操作,可以更新表中已经存在数据记录中的值.在MySQL中可以通过UPDATE语句来实现更新数据记录,该SQL语句可以通过如下几种方式使用:更新特定数据记录,更新所有数据记 ...

  9. MySQL - 更新表中的数据记录

    更新表中的数据记录 更新数据记录是数据操作中常见的操作,可以更新表中已经存在数据记录中的值.在MySQL中可以通过UPDATE语句来实现更新数据记录,该SQL语句可以通过如下几种方式使用:更新特定数据 ...

最新文章

  1. ASP.NET实现数据图表
  2. VAE--就是AutoEncoder的编码输出服从正态分布
  3. #pragma message的作用
  4. java线程(2)--同步和锁
  5. iTunes,一个不断侵蚀C盘的大虫
  6. POJ 1470 Closest Common Ancestors(最近公共祖先 LCA)
  7. 【图卷积网络】Graph Convolutional Network
  8. iphone6s读写速度测试软件,iPhone6S/7/8运行iOS13速度测试:结果有点失望
  9. 图灵测试 Alan Turning
  10. 2021-10-07 浊音,清音,爆破音频谱分析
  11. NVIDIA NCCL 源码学习(六)- channel搜索
  12. 噩梦的开始:动态规划之背包问题(01背包问题、完全背包问题、方案数填满型背包问题)
  13. 测绘资质办理需要注意的流程和规定
  14. 数据库——ER图知识点详集
  15. 电商项目业务整体概览
  16. SparkCore案例练习:统计广告ID
  17. Go语言圣经阅读-第二周
  18. 管理者的第一堂必修课
  19. 关于#define _CRT_SECURE_NO_WARNINGS 1在打开vs2019时自动生成问题解决(使用Notepad++)
  20. 网络靶场实战-记一次大型内网渗透实践 【完结篇】

热门文章

  1. python数据分析面试_python数据分析面试
  2. 在Mac上设置环境变量并永久生效的方法
  3. 在Ubuntu 12.04 64bit上搭建Crtmpserver视频直播服务
  4. Maya 2022中的硬表面建模技术学习视频教程
  5. leetcode-455 分发饼干
  6. IDEA新建一个多maven模块工程(有图)
  7. [UWP小白日记-10]程序启动屏(ios解锁既视感)
  8. Mac OS Terminal Commands
  9. 又拍云SSL证书全新上线,提供一站式HTTPS安全解决方案
  10. CentOS中vsftp安装与配置