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 相关文章推荐
你需要知道的10个最佳javascript开发实践小结
Apr 15 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
Dec 21 Javascript
通过复制Table生成word和excel的javascript代码
Jan 20 Javascript
jQuery中trigger()与bind()用法分析
Dec 18 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
Aug 11 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
Nov 03 Javascript
浅谈vue中数据双向绑定的实现原理
Sep 14 Javascript
使用socket.io实现简单聊天室案例
Jan 02 Javascript
Vue中的Props(不可变状态)
Sep 29 Javascript
Vue Echarts实现可视化世界地图代码实例
May 07 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
Sep 26 Javascript
es6函数之rest参数用法实例分析
Apr 18 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
浅谈Windows下 PHP4.0与oracle 8的连接设置
2006/10/09 PHP
用PHP开发GUI
2006/10/09 PHP
用PHP实现小型站点广告管理
2006/10/09 PHP
php define的第二个参数使用方法
2013/11/04 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
PHP重载基础知识回顾
2020/09/10 PHP
ExtJS 2.0 实用简明教程之布局概述
2009/04/29 Javascript
javascript面向对象之Javascript 继承
2010/05/04 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
JQuery获取与设置HTML元素的内容或文本的实现代码
2014/06/20 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
2015/03/18 Javascript
Backbone View 之间通信的三种方式
2016/08/09 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
使用vuex缓存数据并优化自己的vuex-cache
2018/05/30 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
React Native 混合开发多入口加载方式详解
2019/09/23 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
Python中scatter函数参数及用法详解
2017/11/08 Python
浅谈flask截获所有访问及before/after_request修饰器
2018/01/18 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
pandas 空数据处理方法详解
2019/11/02 Python
最小二乘法及其python实现详解
2020/02/24 Python
python实现udp传输图片功能
2020/03/20 Python
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
推广活动策划方案
2014/08/23 职场文书
大学生见习期满自我鉴定
2014/09/13 职场文书
综合素质自我评价怎么写
2014/09/14 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
张丽莉事迹观后感
2015/06/16 职场文书
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server
十大冰系宝可梦排名,颜值最高的阿罗拉九尾,第三使用率第一
2022/03/18 日漫