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实现下载文件流完整前后端代码
Nov 17 Vue.js
浅谈Vue使用Elementui修改默认的最快方法
Dec 05 Vue.js
vue 在服务器端直接修改请求的接口地址
Dec 19 Vue.js
vue 使用rules对表单字段进行校验的步骤
Dec 25 Vue.js
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 Vue.js
Vue单页面应用中实现Markdown渲染
Feb 14 Vue.js
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 Vue.js
使用Vue.js和MJML创建响应式电子邮件
Mar 23 Vue.js
vue判断按钮是否可以点击
Apr 09 Vue.js
vue postcss-px2rem 自适应布局
May 15 Vue.js
vue css 相对路径导入问题级踩坑记录
Jun 05 Vue.js
Vue Mint UI mt-swipe的使用方式
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
精通php的十大要点(上)
2009/02/04 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
2018/06/20 PHP
Laravel用户授权系统的使用方法示例
2018/09/16 PHP
php集成开发环境详解
2019/09/24 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
2010/03/09 Javascript
json的前台操作和后台操作实现代码
2012/01/20 Javascript
向当前style sheet中插入一个新的style实现方法
2013/04/01 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
JS实现的Select三级下拉菜单代码
2015/08/20 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
Mint UI实现A-Z字母排序的城市选择列表
2018/12/28 Javascript
高效jQuery选择器的5个技巧实例分析
2019/11/26 jQuery
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
全网小程序接口请求封装实例代码
2020/11/06 Javascript
python处理圆角图片、圆形图片的例子
2014/04/25 Python
简单上手Python中装饰器的使用
2015/07/12 Python
Python使用爬虫猜密码
2016/02/19 Python
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
Python中字符串的修改及传参详解
2016/11/30 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
Django如何配置mysql数据库
2018/05/04 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
python中时间模块的基本使用教程
2019/05/14 Python
python中scipy.stats产生随机数实例讲解
2021/02/19 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
档案接收函范文
2014/01/10 职场文书
美丽乡村建设实施方案
2014/03/23 职场文书
2014年测量员工作总结
2014/12/12 职场文书
酒店宣传语大全
2015/07/13 职场文书
导游词之天津盘山
2019/11/01 职场文书