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组件简易模拟实现购物车
Dec 21 Vue.js
vue+element UI实现树形表格
Dec 29 Vue.js
Vue中强制组件重新渲染的正确方法
Jan 03 Vue.js
vue watch监控对象的简单方法示例
Jan 07 Vue.js
vue编写简单的购物车功能
Jan 08 Vue.js
关于Vue Router的10条高级技巧总结
May 06 Vue.js
vue3使用vue-router的完整步骤记录
Jun 20 Vue.js
Vue-Element-Admin集成自己的接口实现登录跳转
Jun 23 Vue.js
详解Vue router路由
Nov 20 Vue.js
详解Vue slot插槽
Nov 20 Vue.js
vue+echarts实现多条折线图
Mar 21 Vue.js
vue配置型表格基于el-table拓展之table-plus组件
Apr 12 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 zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
php函数连续调用实例分析
2015/07/30 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
另类调用flash无须激活的方法
2006/12/27 Javascript
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
extjs之去除s.gif的影响
2010/12/25 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
2017/11/07 Javascript
使用 vue.js 构建大型单页应用
2018/02/10 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
node-red File读取好保存实例讲解
2019/09/11 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
python将图片文件转换成base64编码的方法
2015/03/14 Python
Python实现的排列组合计算操作示例
2017/10/13 Python
PyCharm 常用快捷键和设置方法
2017/12/20 Python
python解决字符串倒序输出的问题
2018/06/25 Python
用Python实现读写锁的示例代码
2018/11/05 Python
Python3多目标赋值及共享引用注意事项
2019/05/27 Python
tensorflow 只恢复部分模型参数的实例
2020/01/06 Python
python使用bs4爬取boss直聘静态页面
2020/10/10 Python
python unichr函数知识点总结
2020/12/16 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
英国现代、当代和设计师家具店:Furntastic
2020/07/18 全球购物
教导主任竞聘演讲稿
2014/05/16 职场文书
新年寄语2016
2015/08/17 职场文书
电力安全教育培训心得体会
2016/01/11 职场文书