详解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 相关文章推荐
Extjs中ComboBox加载并赋初值的实现方法
Mar 22 Javascript
JavaScript 判断浏览器是否支持SVG的代码
Mar 21 Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
May 16 Javascript
js简单正则验证汉字英文及下划线的方法
Nov 28 Javascript
JavaScript字符串对象(string)基本用法示例
Jan 18 Javascript
微信小程序本地缓存数据增删改查实例详解
May 24 Javascript
JavaScript实现删除数组重复元素的5种常用高效算法总结
Jan 18 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
Apr 17 Javascript
layer弹出层父子页面事件相互调用方法
Aug 17 Javascript
JS document form表单元素操作完整示例
Jan 13 Javascript
Vue 3.0 全家桶抢先体验
Apr 28 Javascript
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 Vue.js
基于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和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
Prototype ObjectRange对象学习
2009/07/19 Javascript
window.open不被拦截的实现代码
2012/08/22 Javascript
Json对象与Json字符串互转(4种转换方式)
2013/03/27 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖放商品放置购物车
2015/11/30 Javascript
javascript 通过键名获取键盘的keyCode方法
2017/12/31 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
2019/08/05 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
2019/12/25 jQuery
js实现飞机大战游戏
2020/08/26 Javascript
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
[45:16]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第一场 12.12
2020/12/16 DOTA
利用python模拟实现POST请求提交图片的方法
2017/07/25 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
python制作填词游戏步骤详解
2019/05/05 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
解决Python安装cryptography报错问题
2020/09/03 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
美国宠物商店:Wag.com
2016/10/25 全球购物
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
总裁助理岗位职责
2014/02/17 职场文书
电子银行营销方案
2014/02/22 职场文书
情人节活动策划方案
2014/02/27 职场文书
舞蹈毕业生的自我评价
2014/03/05 职场文书
德语专业求职信
2014/03/12 职场文书
领导班子在批评与自我批评座谈会上的发言
2014/09/28 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书
python读取并查看npz/npy文件数据以及数据显示方法
2022/04/14 Python
java实现面板之间切换功能
2022/06/10 Java/Android