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从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 Vue.js
Vue——前端生成二维码的示例
Dec 19 Vue.js
vue自定义组件实现双向绑定
Jan 13 Vue.js
vue二选一tab栏切换新做法实现
Jan 19 Vue.js
vue使用transition组件动画效果的实例代码
Jan 28 Vue.js
Vue SPA 首屏优化方案
Feb 26 Vue.js
使用Vue.js和MJML创建响应式电子邮件
Mar 23 Vue.js
如何理解Vue简单状态管理之store模式
May 15 Vue.js
分享一个vue实现的记事本功能案例
Apr 11 Vue.js
vue项目配置sass及引入外部scss文件
Apr 14 Vue.js
vue动态绑定style样式
Apr 20 Vue.js
解决vue自定义组件@click点击失效问题
Apr 30 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
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
javascript 动态参数判空操作
2008/12/22 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
JS自动缩小超出大小的图片
2012/10/12 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
2013/07/09 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
AngularJs入门教程之环境搭建+创建应用示例
2016/11/01 Javascript
bootstrap——bootstrapTable实现隐藏列的示例
2017/01/14 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
微信小程序实现富文本图片宽度自适应的方法
2019/01/20 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
[35:29]Secret vs VG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
Python入门之三角函数全解【收藏】
2017/11/08 Python
Windows下python3.6.4安装教程
2018/07/31 Python
Django中celery执行任务结果的保存方法
2019/07/12 Python
如何给Python代码进行加密
2020/01/10 Python
selenium如何定位span元素的实现
2021/01/13 Python
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
竞选大学学委演讲稿
2014/09/13 职场文书
2014国庆节国旗下演讲稿(精选版)
2014/09/26 职场文书
2014年部门工作总结
2014/11/12 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
使用Redis做预定库存缓存功能
2022/04/02 Redis
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android