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 相关文章推荐
兼容Mozilla必须知道的知识。
Jan 09 Javascript
javascript中常用编程知识
Apr 08 Javascript
js代码验证手机号码和电话号码是否合法
Jul 30 Javascript
TypeOf这些知识点你了解吗
Feb 21 Javascript
sea.js常用的api简易文档
Nov 15 Javascript
微信小程序的动画效果详解
Jan 18 Javascript
jquery滚动条插件slimScroll使用方法
Feb 09 Javascript
微信小程序实现图片懒加载的示例代码
Dec 13 Javascript
利用js给datalist或select动态添加option选项的方法
Jan 25 Javascript
JS中‘hello’与new String(‘hello’)引出的问题详解
Aug 14 Javascript
vue-quill-editor富文本编辑器简单使用方法
Sep 21 Javascript
vue3使用vue-router的完整步骤记录
Jun 20 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操作mysql函数详解,mysql和php交互函数
2011/05/19 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
php操作access数据库的方法详解
2017/02/22 PHP
基于jQuery的仿flash的广告轮播
2010/11/05 Javascript
JS的千分位算法实现思路
2013/07/31 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
JS原生数据双向绑定实现代码
2017/08/14 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
微信小程序内拖动图片实现移动、放大、旋转的方法
2018/09/04 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
Vue父组件监听子组件生命周期
2020/09/03 Javascript
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
浅析PHP与Python进行数据交互
2018/05/15 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
Python猫眼电影最近上映的电影票房信息
2020/09/18 Python
基于DOM+CSS3实现OrgChart组织结构图插件
2016/03/02 HTML / CSS
Kneipp克奈圃美国官网:德国百年精油配方的传承
2018/02/07 全球购物
英国现代市场:ARKET
2019/04/10 全球购物
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
英文版餐饮运营管理求职信
2013/11/06 职场文书
证婚人搞笑证婚词
2014/01/10 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
公司奖励通知
2015/04/21 职场文书
2015年幼儿园后勤工作总结
2015/04/25 职场文书
社区党员干部承诺书
2015/05/04 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
Python基础之Socket通信原理
2021/04/22 Python
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
TypeScript实用技巧 Nominal Typing名义类型详解
2022/09/23 Javascript