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 相关文章推荐
JavaScript 字符串乘法
Aug 20 Javascript
JavaScript设置body高度为浏览器高度的方法
Feb 09 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
Nov 30 Javascript
微信小程序中单位rpx和rem的使用
Dec 06 Javascript
原生Javascript插件开发实践
Jan 09 Javascript
原生JS实现几个常用DOM操作API实例
Jan 19 Javascript
js实现九宫格的随机颜色跳转
Feb 19 Javascript
基于jQuery实现瀑布流页面
Apr 11 jQuery
jQuery+ajax实现修改密码验证功能实例详解
Jul 06 jQuery
深入浅析Vue不同场景下组件间的数据交流
Aug 15 Javascript
@angular前端项目代码优化之构建Api Tree的方法
Dec 24 Javascript
详解Vue template 如何支持多个根结点
Feb 10 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
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
学习PHP session的传递方式
2016/06/15 PHP
PHP+JQUERY操作JSON实例
2017/03/23 PHP
PHP中$GLOBALS与global的区别详解
2019/03/21 PHP
JS面向对象编程之对象使用分析
2010/08/19 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
Windows 系统下安装和部署Egret的开发环境
2014/07/31 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
JavaScript实现在标题栏上显示当前日期的方法
2015/03/19 Javascript
JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集
2015/09/28 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
jquery之基本选择器practice(实例讲解)
2017/09/30 jQuery
vue.extend实现alert模态框弹窗组件
2018/04/28 Javascript
jQuery 导航自动跟随滚动的实现代码
2018/05/30 jQuery
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python线程池的实现实例
2013/11/18 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
python七夕浪漫表白源码
2019/04/05 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
巴西电子、家电、智能手机购物网站:Girafa
2019/06/04 全球购物
文明学生事迹材料
2014/01/29 职场文书
司法局火灾防控方案
2014/06/05 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
基于Python实现西西成语接龙小助手
2022/08/05 Golang