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 点击整页变灰的效果(可做退出效果)。
Jan 09 Javascript
JavaScript 创建对象
Jul 17 Javascript
Javascript常用小技巧汇总
Jun 24 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
Jul 17 Javascript
JavaScript编程中布尔对象的基本使用
Oct 25 Javascript
JS组件Form表单验证神器BootstrapValidator
Jan 26 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
Feb 06 Javascript
jquery中封装函数传递当前元素的方法示例
May 05 jQuery
VSCode 配置React Native开发环境的方法
Dec 27 Javascript
vue-router启用history模式下的开发及非根目录部署方法
Dec 23 Javascript
Node.js 进程平滑离场剖析小结
Jan 24 Javascript
JavaScript实现图片伪异步上传过程解析
Apr 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
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
php网站被挂木马后的修复方法总结
2014/11/06 PHP
ecshop 2.72如何修改后台访问地址
2015/03/03 PHP
PHP7.0版本备注
2015/07/23 PHP
php之static静态属性与静态方法实例分析
2015/07/30 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
laravel 创建命令行命令的图文教程
2019/10/23 PHP
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
JQuery异步获取返回值中文乱码的解决方法
2015/01/29 Javascript
JavaScript新增样式规则(推荐)
2016/07/19 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
AngularJS表单验证功能
2017/10/19 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
Python找出list中最常出现元素的方法
2016/06/14 Python
使用python进行文本预处理和提取特征的实例
2018/06/05 Python
详解Python中的内建函数,可迭代对象,迭代器
2019/04/29 Python
Python3内置模块random随机方法小结
2019/07/13 Python
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
如何基于pandas读取csv后合并两个股票
2020/09/25 Python
CSS3提交意见输入框样式代码
2014/10/30 HTML / CSS
css3+伪元素实现鼠标移入时下划线向两边展开的效果
2017/04/25 HTML / CSS
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
关于.NET, HTML的五个问题
2012/08/29 面试题
材料加工工程求职信
2014/02/19 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
化验员岗位职责
2015/02/14 职场文书
合作与交流自我评价
2015/03/09 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书