详解vue中的父子传值双向绑定及数据更新问题


Posted in Javascript onJune 13, 2019

在进行父子组件传值时,用到子组件直接控制父组件中的变量值以及在vue中直接更改对象或者数组的值,视图未发生变化的解决办法,当时完成项目时,一直未找到原因,修改了好久。

1.父子组件传值双向绑定

在传递给子组件中的变量上使用.sync修饰符,就能够实现父子传值的双向绑定

<!-- 父组件 -->
<template>
 <div class="audioCate">
 <child :show.sync="showModel" @closeModel="handleCloseModel"></child>
 </div>
</template>
<script>
 import child from './child'
 export default{
 components: {
  child,
 }
 data() {
  return {
  showModel: false
  }
 },
 methods: {
  handleCloseModel() {
  this.showModel = false;
  }
 }
 }
</script>
<!-- 子组件 -->
<template>
 <div class="cate" @click="handleClick">
 <div></div>
 </div>
</template>
<script>
 export default{
 props: {
  show: Boolean,
 },
 data() {
  return {
  showModel: false
  }
 },
 methods: {
  handleClick() {
  /* 直接更新父组件中的showModel值 */
  this.$emit('update:show', false);
  /* 或者调用父组件中的方法对showModel进行更改 */
  /* this.$emit('closeModel'); */
  }
 }
 }
</script>

2.修改对象或数组中的键,视图未发生变化

使用$set方法进行修改,官方文档中也有说明

详解vue中的父子传值双向绑定及数据更新问题

当时我是直接对数组中的值进行修改,但是视图没有发生变化

<script>
 export default{
 data() {
  return {
  item: {
   title: '222'
  },
  options: [11, 22],
  list: [
   {
   title: '2222'
   }
  ]
  }
 },
 created() {
  /* 对于对象,第一个为要修改的对象,第二个参数为对象的键,第三个为要修改的键对应的值 */
  this.$set(this.item, 'title', '2200');
  /* 对于对象,第一个为要修改的数组,第二个参数为数组索引,第三个为要修改的索引对应的值 */
  this.$set(this.options, 0, 33);
  /* 对于数组里包含对象,可以利用循环对其进行修改 */
  this.list.forEach(item => {
  this.$set(item, '_disableExpand', true);
  });
  /* 对于数组里包含对象,也可以利用Object.assign对其进行修改 */
  this.list[0] = Object.assign({}, this.list[0], { num: 10 });
  this.$set(this.list, 0, this.list[0]);
 },
 }
</script>

也可以直接进行修改后对页面进行强制刷新,使用$forceUpdate()方法

this.options[0] = 100;
this.$forceUpdate();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript Excel操作知识点
Apr 24 Javascript
js/jquery去掉空格,回车,换行示例代码
Nov 05 Javascript
js中继承的几种用法总结(apply,call,prototype)
Dec 26 Javascript
2014年50个程序员最适用的免费JQuery插件
Dec 15 Javascript
浅谈如何实现easyui的datebox格式化
Jun 12 Javascript
只需五句话搞定JavaScript作用域(经典)
Jul 26 Javascript
微信小程序 页面跳转和数据传递实例详解
Jan 19 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
May 02 Javascript
深入理解vue-loader如何使用
Jun 06 Javascript
vue使用drag与drop实现拖拽的示例代码
Sep 07 Javascript
基于复选框demo(分享)
Sep 27 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
Aug 04 Javascript
基于Vue实现平滑过渡的拖拽排序功能
Jun 12 #Javascript
Vue + Elementui实现多标签页共存的方法
Jun 12 #Javascript
JavaScript使用面向对象实现的拖拽功能详解
Jun 12 #Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
Jun 12 #jQuery
小程序组件之自定义顶部导航实例
Jun 12 #Javascript
vue项目中将element-ui table表格写成组件的实现代码
Jun 12 #Javascript
React 全自动数据表格组件——BodeGrid的实现思路
Jun 12 #Javascript
You might like
基于PHP编程注意事项的小结
2013/04/27 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
php判断表是否存在的方法
2015/06/18 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
Javascript aop(面向切面编程)之around(环绕)分析
2015/05/01 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
开启BootStrap学习之旅
2016/05/04 Javascript
Javascript中的对象和原型(二)
2016/08/12 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
Vue 自定义动态组件实例详解
2018/03/28 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
[34:10]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
解析Python中的异常处理
2015/04/28 Python
理解Python中的With语句
2016/03/18 Python
Python字典循环添加一键多值的用法实例
2019/01/20 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
python selenium实现发送带附件的邮件代码实例
2019/12/10 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
Peter Alexander新西兰站:澳大利亚领先的睡衣设计师品牌
2016/12/10 全球购物
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
初中新生军训方案
2014/05/13 职场文书
大学生个人求职信
2014/06/02 职场文书
公司任命书范本
2014/06/04 职场文书
就业导师推荐信范文
2015/03/27 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang