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 element实现表格合并行数据
Nov 30 Vue.js
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
Dec 01 Vue.js
vue-router定义元信息meta操作
Dec 07 Vue.js
为什么推荐使用JSX开发Vue3
Dec 28 Vue.js
Vue中强制组件重新渲染的正确方法
Jan 03 Vue.js
vue使用lodop打印控件实现浏览器兼容打印的方法
Feb 07 Vue.js
vue路由实现登录拦截
Mar 24 Vue.js
vue3如何优雅的实现移动端登录注册模块
Mar 29 Vue.js
vue完美实现el-table列宽自适应
May 08 Vue.js
详解vue中v-for的key唯一性
May 15 Vue.js
Vue图片裁剪组件实例代码
Jul 02 Vue.js
详解Vue的列表渲染
Nov 20 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
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
实现树状结构的两种方法
2006/10/09 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
js监听输入框值的即时变化onpropertychange、oninput
2011/07/13 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
js的alert样式如何更改如背景颜色
2014/01/22 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
bootstrap弹出层的多种触发方式
2017/05/10 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
js判断输入框不能为空格或null值的实现方法
2018/03/02 Javascript
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
jquery实现动态创建form并提交的方法示例
2019/05/27 jQuery
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
如何在JavaScript中创建具有多个空格的字符串?
2020/02/23 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
详细介绍Python函数中的默认参数
2015/03/30 Python
Python中取整的几种方法小结
2017/01/06 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
PYTHON基础-时间日期处理小结
2018/05/05 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
管理信息系学生的自我评价
2014/01/11 职场文书
超市中秋节活动方案
2014/02/12 职场文书
十佳党员事迹材料
2014/08/28 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
4S店客服专员岗位职责
2015/04/07 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
导游词之杭州西湖
2019/09/19 职场文书