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 相关文章推荐
基于jQuery的投票系统显示结果插件
Aug 12 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
Dec 02 Javascript
JavaScript使用Math.Min返回两个数中较小数的方法
Apr 06 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
May 04 Javascript
JavaScript 消息框效果【实现代码】
Apr 27 Javascript
Bootstrap模仿起筷首页效果
May 09 Javascript
详谈jQuery.load()和Jsp的include的区别
Apr 12 jQuery
详解wow.js中各种特效对应的类名
Sep 13 Javascript
angular之ng-template模板加载
Nov 09 Javascript
详解Vue.js自定义tipOnce指令用法实例
Dec 19 Javascript
vue-cli3配置与跨域处理方法
Aug 17 Javascript
JavaScript实现PC端四格密码输入框功能
Feb 19 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
帅气的琦玉老师
2020/03/02 日漫
《PHP编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
php 字符串替换的方法
2012/01/10 PHP
兼容ie6浏览器的php下载文件代码分享
2014/07/14 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
javascript 检测浏览器类型和版本的代码
2009/09/15 Javascript
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
js的alert弹出框出现乱码解决方案
2013/09/02 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
AngularJS基础 ng-if 指令用法
2016/08/01 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
老生常谈angularjs中的$state.go
2017/04/24 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
2019/04/02 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
Python 正则表达式(转义问题)
2014/12/15 Python
python对url格式解析的方法
2015/05/13 Python
Python守护进程和脚本单例运行详解
2017/01/06 Python
Django自定义插件实现网站登录验证码功能
2017/04/19 Python
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
Python列表list排列组合操作示例
2018/12/18 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
基于Tensorflow批量数据的输入实现方式
2020/02/05 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
Python参数传递及收集机制原理解析
2020/06/05 Python
Python 绘制可视化折线图
2020/07/22 Python
用pip给python安装matplotlib库的详细教程
2021/02/24 Python
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
Nordgreen台湾官网:极简北欧设计手表
2019/08/21 全球购物
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
MongoDB balancer的使用详解
2021/04/30 MongoDB
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
2022/04/06 Vue.js