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 相关文章推荐
jquery 模拟类搜索框自动完成搜索提示功能(改进)
May 24 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
Jun 19 Javascript
js 自定义个性下拉选择框示例
Aug 20 Javascript
使用javascript做的一个随机点名程序
Feb 13 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
Aug 13 Javascript
基于JavaScript代码实现微信扫一扫下载APP
Dec 30 Javascript
快速使用Bootstrap搭建传送带
May 06 Javascript
基于js实现checkbox批量选中操作
Nov 22 Javascript
Vue 仿QQ左滑删除组件功能
Mar 12 Javascript
JavaScript创建防篡改对象的方法分析
Dec 30 Javascript
js 递归json树实现根据子id查父id的方法分析
Nov 08 Javascript
利用js实现简单开关灯代码
Nov 23 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 uniqid函数生成唯一ID
2015/11/18 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
js 动态选中下拉框
2009/11/26 Javascript
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
jQuery实现的一个自定义Placeholder属性插件
2014/08/11 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
2016/11/23 Javascript
JavaScript中双向数据绑定详解
2017/05/03 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
Vue监听事件实现计数点击依次增加的方法
2018/09/26 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
老生常谈python中的重载
2018/11/11 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
python与字符编码问题
2019/05/24 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
2020/02/10 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
2020/03/24 Python
纯CSS3绘制打火机动画火焰效果
2016/07/18 HTML / CSS
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
环保建议书作文
2014/03/12 职场文书
古汉语文学求职信范文
2014/03/16 职场文书
工作感想范文
2015/08/07 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
Spring Boot 底层原理基础深度解析
2022/04/03 Java/Android