详解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 中的内存泄露模式
Aug 13 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
May 19 Javascript
javascript中parentNode,childNodes,children的应用详解
Dec 17 Javascript
代码分析jQuery四种静态方法使用
Jul 23 Javascript
jQuery实现可展开合拢的手风琴面板菜单
Sep 15 Javascript
jQuery+ajax+asp.net获取Json值的方法
Jun 08 Javascript
javascript读取文本节点方法小结
Dec 15 Javascript
详解angular2封装material2对话框组件
Mar 03 Javascript
js实现可以点击收缩或张开的悬浮窗
Sep 18 Javascript
JS+Canvas绘制动态时钟效果
Nov 10 Javascript
JS实现的计数排序与基数排序算法示例
Dec 04 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
Oct 22 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 curl实现抓取302跳转后页面的示例
2014/07/04 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
一些常用的JS功能函数代码
2009/06/23 Javascript
jquery插件制作简单示例说明
2012/02/03 Javascript
jQuery实现id模糊查询的小例子
2013/03/19 Javascript
一个通过script自定义属性传递配置参数的方法
2014/09/15 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
jquery实现轮播图效果
2017/02/13 Javascript
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
一道python走迷宫算法题
2018/01/22 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
python 判断网络连通的实现方法
2018/04/22 Python
python自动化报告的输出用例详解
2018/05/30 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
如何使用Python 打印各种三角形
2019/06/28 Python
python deque模块简单使用代码实例
2020/03/12 Python
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
程序设计HTML5 Canvas API
2013/04/08 HTML / CSS
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
应届毕业生个人求职自荐信
2014/01/06 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
入股协议书范本
2014/04/14 职场文书
中药学专业求职信
2014/05/31 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
2015年税务稽查工作总结
2015/05/26 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
MySQL的安装与配置详细教程
2021/06/26 MySQL
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技
Python 中面向接口编程
2022/05/20 Python