vue中如何让子组件修改父组件数据


Posted in Javascript onJune 14, 2018

一、关于vue中watch的认识

我们要监听一个属性的的变化就使用watch一般是父组件传递给子组件的时候

•1、常见的使用场景

...
watch:{
  value(val) {
    console.log(val);
    this.visible = val;
  }
}
...

•2、如果要一开始就执行

...
watch: {
  firstName: {
    handler(newName, oldName) {
      this.fullName = newName + '-' + this.lastName;
    },
    immediate: true,
  }
}
...

•3、深度监听(数组、对象)

...
watch: {
  obj: {
    handler(newName, oldName) {
    console.log('///')
  },
  immediate: true,
  deep: true,
}
...

二、关于子组件修改父组件属性认识

在vue2.0+ 后不再是双向绑定,如果要进行双向绑定需要特殊处理。

[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "你修改的属性名"

•1、通过事件发送给父组件来修改

**在子组件test1中**
<input type="text" v-model="book"/>
<button @click="add">添加</button>
<p v-for="(item, index) of books" :key="index">{{item}}</p>
...
methods: {
  add() {
    // 直接把数据发送给父组件
    this.$emit('update', this.book);
    this.book = '';
  },
},
**在父组件中**
<test1 :books="books" @update="addBook"></test1>
...
addBook(val) {
  this.books = new Array(val)
},

•2、使用.sync 来让子组件修改父组件的值(其实是上面方法的精简版)

**在父组件中,直接在需要传递的属性后面加上.sync**
<test4 :word.sync="word"/>
**在子组件中**
<template>
  <div>
    <h3>{{word}}</h3>
    <input type="text" v-model="str" />
  </div>
</template>
<script>
export default {
  props: {
    word: {
      type: String,
      default: '',
    },
  },
  data() {
    return {
      str: '',
    }
  },
  watch: {
    str(newVal, oldVal) {
      // 在监听你使用update事件来更新word,而在父组件不需要调用该函数
      this.$emit('update:word', newVal);
    }
  }
}
</script>

•3、在子组件中拷贝一份副本

**子组件中**
export default {
  props: {
    // 已经选中的
    checkModalGroup: {
      type: Array,
      default: [],
      required: false,
    }
  },
  data() {
    return{
      copyCheckModalGroup: this.checkModalGroup, // 选中的
    }
  },
  methods: {
    // 一个一个的选择
    checkAllGroupChange(data) {
      // 把当前的发送给父组件
      this.$emit('updata', data);
    },
  },
  watch: {
    checkModalGroup(newVal, oldVal) {
      this.copyCheckModalGroup = newVal;
    }
  }
}
**父组件中直接更新传递给子组件的数据就可以**
...
// 更新子组件数据
roleCheckUpdata(data) {
  this.roleGroup = data;
},
...

总结

以上所述是小编给大家介绍的vue中如何让子组件修改父组件数据,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Angular中$compile源码分析
Jan 28 Javascript
JS中改变this指向的方法(call和apply、bind)
Mar 26 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
Apr 11 Javascript
ionic实现滑动的三种方式
Aug 27 Javascript
JS中原始值和引用值的储存方式示例详解
Mar 23 Javascript
jsonp跨域及实现百度首页联想功能的方法
Aug 30 Javascript
vue3.0中的双向数据绑定方法及优缺点
Aug 01 Javascript
js之切换全屏和退出全屏实现代码实例
Sep 09 Javascript
基于layui table返回的值的多级嵌套的解决方法
Sep 19 Javascript
jquery实现简单自动轮播图效果
Jul 29 jQuery
js canvas实现俄罗斯方块
Oct 11 Javascript
vue实现Toast组件轻提示
Apr 10 Vue.js
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
Jun 14 #Javascript
MVVM框架下实现分页功能示例
Jun 14 #Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
Jun 14 #jQuery
React 组件间的通信示例
Jun 14 #Javascript
三分钟学会用ES7中的Async/Await进行异步编程
Jun 14 #Javascript
详解React中setState回调函数
Jun 14 #Javascript
JavaScript 判断对象中是否有某属性的常用方法
Jun 14 #Javascript
You might like
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
2012/04/09 PHP
PHP中的Memcache详解
2014/04/05 PHP
非常实用的PHP常用函数汇总
2014/12/17 PHP
php中yii框架实例用法
2020/12/22 PHP
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
Javascript中call,apply,bind方法的详解与总结
2016/12/12 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
js中this对象用法分析
2018/01/05 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
react中使用css的7中方式(最全总结)
2019/02/11 Javascript
vue-froala-wysiwyg 富文本编辑器功能
2019/09/19 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
[50:28]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs KG
2018/04/01 DOTA
Python性能优化的20条建议
2014/10/25 Python
详细介绍Python的鸭子类型
2016/09/12 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
python pygame实现球球大作战
2019/11/25 Python
Timberland美国官网:全球领先的户外品牌
2016/08/15 全球购物
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
私人会所最新创业计划书范文
2014/03/24 职场文书
普通党员对照检查材料
2014/08/28 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
Java版 简易五子棋小游戏
2022/05/04 Java/Android
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL