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 页面计时器示例代码
Oct 28 Javascript
模拟一个类似百度google的模糊搜索下拉列表
Apr 15 Javascript
JavaScript Serializer序列化时间处理示例
Jul 31 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
Jun 15 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
Sep 21 Javascript
js实现的简练高效拖拽功能示例
Dec 21 Javascript
基于JavaScript实现瀑布流效果
Mar 29 Javascript
jquery append与appendTo方法比较
May 24 jQuery
vuejs 单文件组件.vue 文件的使用
Jul 28 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
Nov 30 Javascript
微信小程序模板template简单用法示例
Dec 04 Javascript
JS事件循环机制event loop宏任务微任务原理解析
Aug 04 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
PHPMailer 中文使用说明小结
2010/01/22 PHP
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
javascript new fun的执行过程
2010/08/05 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
javascript每日必学之继承
2016/02/23 Javascript
JS组件Bootstrap实现弹出框效果代码
2016/04/26 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
bootstrap模态框消失问题的解决方法
2016/12/02 Javascript
vue axios用法教程详解
2017/07/23 Javascript
js模拟百度模糊搜索的实例
2017/08/04 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
mui上拉加载更多下拉刷新数据的封装过程
2017/11/03 Javascript
基于dataset的使用和图片延时加载的实现方法
2017/12/11 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
Nodejs技巧之Exceljs表格操作用法示例
2019/11/06 NodeJs
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
js实现小时钟效果
2020/03/25 Javascript
JavaScript组合模式---引入案例分析
2020/05/23 Javascript
[03:08]TI9战队档案 - Vici Gaming
2019/08/20 DOTA
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
分析python服务器拒绝服务攻击代码
2014/01/16 Python
Python实现的简单算术游戏实例
2015/05/26 Python
Python使用gensim计算文档相似性
2016/04/10 Python
深入理解python中的select模块
2017/04/23 Python
python实现字符串中字符分类及个数统计
2018/09/28 Python
python实现趣味图片字符化
2019/04/30 Python
详解python列表(list)的使用技巧及高级操作
2019/08/15 Python
详解python tkinter模块安装过程
2020/01/06 Python
Python3实现mysql连接和数据框的形成(实例代码)
2020/01/17 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
推荐信怎么写
2014/05/09 职场文书
化工见习报告范文
2014/10/31 职场文书
2016元旦晚会主持人开场白和结束语
2015/12/03 职场文书
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS