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 相关文章推荐
模仿百度三维地图的js数据分享
May 12 Javascript
JQuery模板插件 jquery.tmpl 动态ajax扩展
Nov 10 Javascript
Js控制弹窗实现在任意分辨率下居中显示
Aug 01 Javascript
js导出txt示例代码
Jan 14 Javascript
JS实现转动随机数抽奖特效代码
Apr 16 Javascript
JQueryEasyUI之DataGrid数据显示
Nov 23 Javascript
如何实现json数据可视化详解
Nov 24 Javascript
Vue仿手机qq的实例代码(demo)
Sep 08 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
Aug 28 Javascript
详解小程序循环require之坑
Mar 08 Javascript
vue实现移动端省市区选择
Sep 27 Javascript
javaScript代码飘红报错看不懂?读完这篇文章再试试
Aug 19 Javascript
微信小程序分享功能之按钮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 信息采集程序代码
2009/03/17 PHP
document 和 document.all 分别什么时候用
2006/06/22 Javascript
JQUERY复选框CHECKBOX全选,取消全选
2008/08/30 Javascript
jQuery 树形结构的选择器
2010/02/15 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
js实现延时加载Flash的方法
2015/11/26 Javascript
JavaScript类的写法
2016/09/17 Javascript
AngularJS动态绑定HTML的方法分析
2016/11/07 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
实例讲解JavaScript预编译流程
2019/01/24 Javascript
Element Carousel 走马灯的具体实现
2020/07/26 Javascript
[45:50]完美世界DOTA2联赛PWL S3 CPG vs Forest 第二场 12.16
2020/12/17 DOTA
Python爬取APP下载链接的实现方法
2016/09/30 Python
Python实现的插入排序算法原理与用法实例分析
2017/11/22 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
pymysql的简单封装代码实例
2020/01/08 Python
python pyg2plot的原理知识点总结
2021/02/28 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
文职个人求职信范文
2013/09/23 职场文书
执行力心得体会
2013/12/31 职场文书
小学英语教学反思
2014/01/30 职场文书
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
导游个人求职信范文
2014/03/23 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
2015年电工工作总结
2015/04/10 职场文书
公司回复函格式
2015/07/14 职场文书