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 相关文章推荐
JS拖动鼠标画出方框实现鼠标选区的方法
Aug 05 Javascript
js实现input框文字动态变换显示效果
Aug 19 Javascript
Jquery日历插件制作简单日历
Oct 28 Javascript
学习JavaScript设计模式(代理模式)
Dec 03 Javascript
在javascript中使用com组件的简单实现方法
Aug 17 Javascript
详谈jQuery中的一些正则匹配表达式
Mar 08 Javascript
AngularJS2中一种button切换效果的实现方法(二)
Mar 27 Javascript
web.js.字符串与正则表达式操作
May 13 Javascript
JavaScript实现简单的文本逐字打印效果示例
Apr 12 Javascript
node app 打包工具pkg的具体使用
Jan 17 Javascript
mpvue实现左侧导航与右侧内容的联动
Oct 21 Javascript
完美解决通过IP地址访问VUE项目的问题
Jul 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
PHP开发框架总结收藏
2008/04/24 PHP
php smarty模板引擎的6个小技巧
2014/04/24 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
thinkPHP自动验证机制详解
2016/12/05 PHP
禁止ajax缓存获取程序最新数据的方法
2013/11/19 Javascript
JS的参数传递示例介绍
2014/02/08 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
JavaScript数值数组排序示例分享
2014/05/27 Javascript
JavaScript实现的类字典插入或更新方法实例
2015/07/10 Javascript
js实现文字滚动效果
2016/03/03 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
给localStorage设置一个过期时间的方法分享
2018/11/06 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
python机器学习理论与实战(五)支持向量机
2018/01/19 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
2018/05/10 Python
python实现狄克斯特拉算法
2019/01/17 Python
Python远程视频监控程序的实例代码
2019/05/05 Python
python中图像通道分离与合并实例
2020/01/17 Python
Pycharm plot独立窗口显示的操作
2020/12/11 Python
HTML5 与 XHTML2
2008/10/17 HTML / CSS
澳大利亚男士西服品牌:M.J.Bale
2018/02/06 全球购物
Bibloo荷兰:女士、男士和儿童的服装、鞋子和配饰
2019/02/25 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
为什么需要版本控制?
2013/08/08 面试题
党校培训思想汇报
2014/01/03 职场文书
内勤岗位职责范本
2015/04/13 职场文书
常用的Python代码调试工具总结
2021/06/23 Python
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js