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 相关文章推荐
你的编程语言可以这样做吗?
Sep 07 Javascript
Array.prototype 的泛型应用分析
Apr 30 Javascript
使用jQuery的attr方法来修改onclick值
Jul 07 Javascript
jquery使用each方法遍历json格式数据实例
May 18 Javascript
jQuery实现类似标签风格的导航菜单效果代码
Aug 25 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
Jan 10 Javascript
vue iview实现动态路由和权限验证功能
Apr 17 Javascript
JavaScript事件发布/订阅模式原理与用法分析
Aug 21 Javascript
vue做移动端适配最佳解决方案(亲测有效)
Sep 04 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
Sep 27 Javascript
js中的数组对象排序分析
Dec 11 Javascript
JS实现数据动态渲染的竖向步骤条
Jun 24 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 身份证号验证函数
2009/05/07 PHP
php fsockopen解决办法 php实现多线程
2014/01/20 PHP
php中Ctype函数用法详解
2014/12/09 PHP
php简单获取文件扩展名的方法
2015/03/24 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
2012/02/27 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
javascript实现百度地图鼠标滑动事件显示、隐藏
2015/04/02 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
JavaScript实现瀑布流图片效果
2017/06/30 Javascript
新手快速入门微信小程序组件库 iView Weapp
2019/06/24 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
理解生产者消费者模型及在Python编程中的运用实例
2016/06/26 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
2018/04/08 Python
使用Selenium破解新浪微博的四宫格验证码
2018/10/19 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
pandas的qcut()方法详解
2019/07/06 Python
python数据预处理 :数据共线性处理详解
2020/02/24 Python
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
英国电子产品购物网站:Tech in the basket
2019/11/08 全球购物
心理健康课教学反思
2014/02/13 职场文书
卫生系统先进事迹
2014/05/13 职场文书
护林防火标语
2014/06/27 职场文书
体育活动总结
2015/02/04 职场文书
保护校园环境倡议书
2015/04/28 职场文书
关于空气污染危害的感想
2015/08/11 职场文书
暑假开始了,你的暑假学习计划写好了吗?
2019/07/04 职场文书
python实现简单的名片管理系统
2021/04/26 Python
对PyTorch中inplace字段的全面理解
2021/05/22 Python
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python