详解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 相关文章推荐
jquery 中多条件选择器,相对选择器,层次选择器的区别
Jul 03 Javascript
jquery 定位input元素的几种方法小结
Jul 28 Javascript
JS鼠标滑过图片时切换图片实现思路
Sep 12 Javascript
jQuery中prop()方法用法实例
Jan 05 Javascript
JS实现自适应高度表单文本框的方法
Feb 25 Javascript
jQuery formValidator表单验证
Jan 07 Javascript
jQuery多选框选择数量限制方法
Feb 08 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
Apr 03 jQuery
基于Vue.js 2.0实现百度搜索框效果
Dec 28 Javascript
Angular事件之不同组件间传递数据的方法
Nov 15 Javascript
axios封装与传参示例详解
Oct 18 Javascript
Vue router配置与使用分析讲解
Dec 24 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命名空间学习详解
2014/02/27 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
PHP屏蔽过滤指定关键字的方法
2014/11/03 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
php PDO异常处理详解
2016/11/20 PHP
jQuery学习笔记之jQuery的DOM操作
2010/12/22 Javascript
js中将字符串转换成json的三种方式
2011/01/12 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
微信小程序实现转盘抽奖
2020/09/21 Javascript
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
Python六大开源框架对比
2015/10/19 Python
python aiohttp的使用详解
2019/06/20 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
浅析Python 序列化与反序列化
2020/08/05 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
Shell编程面试题
2012/05/30 面试题
银行求职推荐信范文
2013/11/30 职场文书
邮政员工辞职信
2014/01/16 职场文书
大学生校园创业计划书
2014/02/08 职场文书
百日安全活动总结
2014/05/04 职场文书
市场营销工作计划书
2014/05/06 职场文书
教师个人学习总结
2015/02/11 职场文书
爱心捐书倡议书
2015/04/27 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python
如何在Python中妥善使用进度条详解
2022/04/05 Python