vue data对象重新赋值无效(未更改)的解决方式


Posted in Javascript onJuly 24, 2020

vue存在一个比较深的问题就是data中的属性对象如果在初始化的时候为{},那么后面在方法用普通的js语法赋值会无效

这里是data

data() {
 return {
  model: {}
 };
 }

这里是方法里的普通赋值

afterUpload(response) {
 this.model.icon = response.url;
}

普通方法会无效,需要使用vue提供的方法重新显示声明

afterUpload(response) {
 this.$set(this.model,'icon',response.url)
}

补充知识:Vue.js - 数组和对象的赋值动态变化 & 克隆

这篇文章主要介绍了 vue 数组和对象不能直接赋值动态变化 & 克隆情况和解决方法,需要的朋友可以参考下。

一、直接赋值动态变化

1.1、Vue 不能检测以下变动的数组

当你利用索引直接设置一个项时,例如

vm.items[indexOfItem] = newValue

当你修改数组的长度时,例如

vm.items.length = newLength

1.2、解决方案

当第一种情况需求时,可以使用

this.$set(this.arr,index,newVal)

this.arr = [新数组]

2.1、Vue 不能检测以下变动的对象

当你修改一个初始化时,不存在的对象里的属性时

this.obj.b = 3

Ps:在不刷新页面父子组件的情况下,二次触发就可以,因为由于第一次的触发渲染,但第一次并没有触发,只有第二次会显示。

2.2、解决方案

当修改一个初始化已存在的属性,可以直接检测到动态变化

this.obj.a = 3

上面不能检测到的另一种解决方案

this.$set(this.person,'age',12)

this.obj = { a: 3, b: 4 }

当需要添加多个对象时

Object.assign({},this.person,{age:12,name:'wee'})

二、数组、对象克隆

当组件间传递对象时,由于此对象的引用类型指向的都是一个地址(除了基本类型跟null,对象之间的赋值,只是将地址指向同一个,而不是真正意义上的拷贝),如下。

数组:

var a = [1,2,3];
var b = a;
b.push(4); // b中添加了一个4
alert(a); // a变成了[1,2,3,4]

对象:

var obj = {a:10};
var obj2 = obj;
obj2.a = 20; // obj2.a改变了
alert(obj.a); // 20,obj的a跟着改变

这就是由于对象类型直接赋值,只是将引用指向同一个地址,导致修改了 obj 会导致 obj2 也被修改。

所以在 vue 中,如果多个组件引用了同一个对象作为数据,那么当其中一个组件改动对象数据时,其他对象的数据也会同步改动。有这种双向绑定的需要的话,那么自然是最好的,但如果不需要这种绑定而希望各组件的对象数据之间相互独立,即是互不关联的对象副本的话,可以用下面的方法解决。

computed: { 
 data: function () { 
  var obj={}; 
  obj=JSON.parse(JSON.stringify(this.templateData)); //this.templateData是父组件传递的对象 
  return obj 
 } 
 }

当然日常的克隆也可以使用这句关键代码

JSON.parse(JSON.stringify(...));

以上这篇vue data对象重新赋值无效(未更改)的解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js带按钮的提示框可供选择示例代码
Sep 17 Javascript
jquery配合css简单实现返回顶部效果
Sep 30 Javascript
推荐9款炫酷的基于jquery的页面特效
Dec 07 Javascript
js实现div模拟模态对话框展现URL内容
May 27 Javascript
Bootstrap基本样式学习笔记之标签(5)
Dec 07 Javascript
微信小程序 picker 组件详解及简单实例
Jan 10 Javascript
Angular JS 生成动态二维码的方法
Feb 23 Javascript
js仿淘宝评价评分功能
Feb 28 Javascript
js数据类型检测总结
Aug 05 Javascript
json数据传到前台并解析展示成列表的方法
Aug 06 Javascript
详解如何在Vue项目中导出Excel
Apr 19 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
Feb 15 Javascript
VUE项目axios请求头更改Content-Type操作
Jul 24 #Javascript
vue+axios全局添加请求头和参数操作
Jul 24 #Javascript
vue在响应头response中获取自定义headers操作
Jul 24 #Javascript
vuex存取值和映射函数使用说明
Jul 24 #Javascript
js实现金山打字通小游戏
Jul 24 #Javascript
vuex中store存储store.commit和store.dispatch的用法
Jul 24 #Javascript
js实现滑动滑块验证登录
Jul 24 #Javascript
You might like
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
PHP获取页面执行时间的方法(推荐)
2016/12/10 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
jcrop基本参数一览
2013/07/16 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
2017/08/17 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
Python基础之函数用法实例详解
2014/09/10 Python
Python基于scrapy采集数据时使用代理服务器的方法
2015/04/16 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
python下对hsv颜色空间进行量化操作
2020/06/04 Python
详解scrapy内置中间件的顺序
2020/09/28 Python
python Pexpect模块的使用
2020/12/25 Python
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
介绍一些UNIX常用简单命令
2014/11/11 面试题
毕业生怎样写好自荐信
2013/11/11 职场文书
2014年保洁工作总结
2014/11/24 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书
年中了,该如何写好个人述职报告?
2019/07/02 职场文书
《悲惨世界》:比天空更广阔的是人的心灵
2020/01/16 职场文书
七个非常实用的Python工具包总结
2021/06/15 Python
Python爬虫基础之初次使用scrapy爬虫实例
2021/06/26 Python
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript