详解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 添加/移除CSS类实现代码
Feb 11 Javascript
js TextArea的选中区域处理
Dec 28 Javascript
jQuery实现form表单reset按钮重置清空表单功能
Dec 18 Javascript
JS实现网页顶部向下滑出的全国城市切换导航效果
Aug 22 Javascript
jQuery获取checkboxlist的value值的方法
Sep 27 Javascript
js文字横向滚动特效
Nov 11 Javascript
jQuery处理XML文件的几种方法
Jun 14 Javascript
浅谈jquery的html方法里包含特殊字符的处理
Nov 30 Javascript
快速实现jQuery多级菜单效果
Feb 01 Javascript
支付宝小程序tabbar底部导航
Nov 06 Javascript
fetch 如何实现请求数据
Dec 20 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
Dec 16 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 Memcached应用实现代码
2010/02/08 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
Laravel-添加后台模板AdminLte的实现方法
2019/10/08 PHP
Div自动滚动到末尾的代码
2008/10/26 Javascript
js 异步处理进度条
2010/04/01 Javascript
JQuery实现可直接编辑的表格
2015/04/16 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
JS实现六边形3D拖拽翻转效果的方法
2016/09/11 Javascript
js捕捉键盘事件和按键键值的方法
2016/10/10 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
判断滚动条滑到底部触发事件(实例讲解)
2017/11/15 Javascript
深入理解js 中async 函数的含义和用法
2018/05/13 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
[01:23]2019完美世界全国高校联赛(春季赛)合肥全国总决赛
2019/06/10 DOTA
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
python lambda函数及三个常用的高阶函数
2020/02/05 Python
python yield和Generator函数用法详解
2020/02/10 Python
django项目中新增app的2种实现方法
2020/04/01 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
希尔顿酒店官方网站:Hilton Hotels
2017/06/01 全球购物
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
世界上最大的艺术社区:SAA
2020/12/30 全球购物
Shell编程面试题
2016/05/29 面试题
管理信息系学生的自我评价
2014/01/11 职场文书
商务考察邀请函范文
2014/01/21 职场文书
敬老院活动总结
2014/04/28 职场文书
会计岗位职责范本
2015/04/02 职场文书
八年级数学教学反思
2016/02/17 职场文书