Vue组件更新数据v-model不生效的解决


Posted in Vue.js onApril 02, 2022

组件更新数据v-model不生效

问题描述

在使用Vue双向绑定(v-model)功能时,封装子组件通过Inject功能使用了父组件中的 model 中的属性进行双向绑定,此时在程序中去更新model的某个属性的值,发现子组件没有实时渲染。

原因分析

由于 JavaScript 的限制,Vue 不能检测数组和对象的变化。尽管如此我们还是有一些办法来回避这些限制并保证它们的响应性。

详见:检测变化注意事项

## 解决方案 对于这种对象变化,我们有三种方法去解决:

方法一

使用Vue.set(object,key,value)

Vue.set(vm.obj,"sex","man")

方法二

使用this.$set(this.object,key,value)

this.$set(this.obj,"sex","man")

方法三

使用**Object.assign({},this.obj)**重新赋值

this.obj.sex = "man";
this.obj = Object.assign({},this.obj)

总结:前两种方式都是应用了Vue内置的set方法去触发对象数据的检测,第三种方式使用的Vue的特性,对跟节点下的数据变更的自动检测。
 

关于v-model失效的问题

在父子组件中,例如iview的table组件中的slot,该函数相对比于table所在附件为父子组件,父子组件的v-model不会是双向绑定,只是单向传值,这是vue的机制问题,原因是不想让子组件污染父组件的数据环境,所以使用的单向传输,经过测试,使用on-change,on-blur等,均存在不同的问题,input如果使用on-change,修改数据源会导致输一个字符,然后更新到v-model绑定的数据源上,然后由于数据源的更新,就会导致该组件的再次渲染,input将会失去焦点,使用v-blur则会导致点击其他按钮时,第一次点击,失去input的焦点,执行绑定的方法,第二次点击才会生效。

解决办法

特别的土,声明一个新的数据源,然后使用on-change改变新的数据源,然后再特定的情况下,比如提交等时机,将新的数据源赋给老的数据源,这样就不会引起问题。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
Vue用mixin合并重复代码的实现
Nov 27 Vue.js
vue基于Echarts的拖拽数据可视化功能实现
Dec 04 Vue.js
基于vuex实现购物车功能
Jan 10 Vue.js
Vue中ref和$refs的介绍以及使用方法示例
Jan 11 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
Feb 11 Vue.js
vue脚手架项目创建步骤详解
Mar 02 Vue.js
vue使用v-model进行跨组件绑定的基本实现方法
Apr 28 Vue.js
vue实现滑动解锁功能
Mar 03 Vue.js
如何优化vue打包文件过大
Apr 13 Vue.js
vue中data里面的数据相互使用方式
Jun 05 Vue.js
Vue+TypeScript中处理computed方式
Apr 02 #Vue.js
Vue+Flask实现图片传输功能
Apr 01 #Vue.js
在vue中import()语法不能传入变量的问题及解决
Apr 01 #Vue.js
Vue中使用import进行路由懒加载的原理分析
Apr 01 #Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 #Vue.js
vue ref如何获取子组件属性值
Mar 31 #Vue.js
vue如何使用模拟的json数据查看效果
You might like
WordPress判断用户是否登录的代码
2011/03/17 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
2016/06/20 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
JavaScript之生成器_动力节点Java学院整理
2017/06/30 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
vue中如何使用ztree
2018/02/06 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
如何通过Proxy实现JSBridge模块化封装
2020/10/22 Javascript
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
python实现TF-IDF算法解析
2018/01/02 Python
python模仿网页版微信发送消息功能
2018/02/24 Python
使用pandas读取csv文件的指定列方法
2018/04/21 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
浅谈django 重载str 方法
2020/05/19 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
Ray-Ban雷朋奥地利官网:全球领先的太阳眼镜品牌
2020/10/12 全球购物
会计学专业学生的求职信范文
2014/01/27 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
投资合作协议书
2014/04/17 职场文书
社会实践评语
2014/04/28 职场文书
物流管理专业自荐信
2014/06/23 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
工作态度不端正检讨书
2014/10/04 职场文书
2014年工程部工作总结
2014/11/25 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书
创业开店,这样方式更合理
2019/08/26 职场文书
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL