vue组件之间的数据传递方法详解


Posted in Javascript onApril 19, 2019

(1)props属性:

在父组件中,可以通过子组件标签属性的形式将数据或者函数传给子组件,子组件通过props去读取父组件传过来的数据

用法

父组件传数据给子组件:

  1. 一般的属性值都是用来给子组件展示的

子组件传数据给父组件

  1. 属性值为函数类型的,一般是用来子组件向父组件传递数据,子组件通过调用父组件传过来的函数,可以修改父组件的状态数据

缺点:

  1. 隔层组件间传递: 必须逐层传递(麻烦)
  2. 兄弟组件间: 必须借助父组件(麻烦)

注意:

//子组件获取父组件传过来的值
props: {
  obj: {//obj为{id:'2'}
    type: Object 
  }
}

引用类型的props,我们可以在子组件中直接修改引用类型属性的值(如:this.obj.id='3',会生效),但是不能直接改变引用类型存储的地址值(如:this.obj = {id: '3'}),会发出警告。

虽然子组件可以直接修改父组件的状态值,但我们不建议这样做,我们希望所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外改变父级组件的状态,从而导致你的应用的数据流向难以理解。

(2)vue自定义事件:

方式1: 给子组件标签绑定事件监听

子组件向父组件的通信方式

功能类似于function props

通过在父组件中给子组件标签绑定自定义事件的监听,再由子组件触发事件,实现子组件向父组件传递数据的方法,事件名必须一致,且不能有大写字母,v-on 事件监听器在 DOM 模板中会被自动转换为全小写 (因为 HTML 是大小写不敏感的)

// 方式一: 通过v-on绑定
<component @delete_todo="deleteTodo"/>
// 方式二: 通过$on()绑定
this.$refs.xxx.$on('delete_todo', function (todo) {
this.deleteTodo(todo)
})

通过this.$emit('delete_todo', todo)触发事件

不适合隔层组件和兄弟组件间的通信

方式2: 通过单独的vm对象绑定监听/分发事件

任意组件间通信(类似于pubsub)

创建一个公用的vm对象

import Vue from 'vue'

export default new Vue()

在接收消息的组件,绑定监听

import vm from './vm.js'

mounted(){
  vm.$on('delete_todo', function (todo) {
		this.deleteTodo(todo)
	})
}

在发送消息的组件,触发事件

vm.$emit('delete_todo', todo)

(3) 消息的订阅和发布(pubsub)

适用于任何关系的组件间的通信
缺点:相对于vuex,管理不够集中
用法:

引入pubsub-js库
在接收消息的组件订阅消息(subscribe)
在发送消息的组件发布消息 ( publish)

(4)vuex

多组件共享状态(数据的管理)
组件间的关系也没有限制
功能比pubsub强大, 更适用于vue项目

(5) slot

父向子通信
通信是带数据的标签
注意: 标签是在父组件中解析

以上所述是小编给大家介绍的vue组件之间的数据传递方法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js资料toString 方法
Mar 13 Javascript
YUI Compressor压缩JavaScript原理及微优化
Jan 07 Javascript
javascript随机将第一个dom中的图片添加到第二个div中示例
Oct 08 Javascript
动态显示可输入的字数提示还可以输入的字数
Apr 01 Javascript
js 中将多个逗号替换为一个逗号的代码
Jun 07 Javascript
js实现文字超出部分用省略号代替实例代码
Sep 01 Javascript
深入浅析javascript继承体系
Oct 23 Javascript
Vue实现PopupWindow组件详解
Apr 28 Javascript
微信小程序实现的picker多级联动功能示例
May 23 Javascript
google广告之另类js调用实现代码
Aug 22 Javascript
vue select 获取value和lable操作
Aug 28 Javascript
javascript实现倒计时提示框
Mar 02 Javascript
详解keep-alive + vuex 让缓存的页面灵活起来
Apr 19 #Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
Apr 19 #Javascript
基于javascript的拖拽类封装详解
Apr 19 #Javascript
Bootstarp在pycharm中的安装及简单的使用方法
Apr 19 #Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
Apr 19 #Javascript
详解vue-cli+es6引入es5写的js(两种方法)
Apr 19 #Javascript
vue中使用vue-cli接入融云实现即时通信
Apr 19 #Javascript
You might like
php cli 方式 在crotab中运行解决
2010/02/08 PHP
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
php目录遍历函数opendir用法实例
2014/11/20 PHP
深入浅析php中sprintf与printf函数的用法及区别
2016/01/08 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
jquery 元素控制(追加元素/追加内容)介绍及应用
2013/04/21 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
Javascript基础教程之关键字和保留字汇总
2015/01/18 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
浅谈javascript alert和confirm的美化
2016/12/15 Javascript
基于vue2.0实现的级联选择器
2017/06/09 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
Vue 用Vant实现时间选择器的示例代码
2019/10/25 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
Python3 集合set入门基础
2020/02/10 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
利用Storage Event实现页面间通信的示例代码
2018/07/26 HTML / CSS
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
银行办理业务介绍信
2014/01/18 职场文书
七夕活动策划方案
2014/08/16 职场文书
搞笑老公保证书
2015/02/26 职场文书
签订劳动合同通知书
2015/04/16 职场文书
幼儿园小班教学反思
2016/03/03 职场文书
女人创业励志语录,句句蕴含能量,激发你的潜能
2019/08/20 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python
关于vue-router-link选择样式设置
2022/04/30 Vue.js