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 相关文章推荐
脚本收藏iframe
Jul 21 Javascript
判断iframe是否加载完成的完美方法
Jan 07 Javascript
Jquery+ajax请求data显示在GridView上(asp.net)
Aug 27 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
Feb 17 Javascript
JS实现在状态栏显示打字效果完整实例
Nov 02 Javascript
jQuery AjaxUpload 上传图片代码
Feb 02 Javascript
javascript检测移动设备横竖屏
May 21 Javascript
jquery文字填写自动高度的实现方法
Nov 07 Javascript
react高阶组件经典应用之权限控制详解
Sep 07 Javascript
Angular2实现的秒表及改良版示例
May 10 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
May 30 jQuery
对vue中的事件穿透与禁止穿透实例详解
Oct 28 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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
php中在PDO中使用事务(Transaction)
2011/05/14 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
php绘制一条弧线的方法
2015/01/24 PHP
PHP屏蔽关键字实现方法
2016/11/17 PHP
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
json的定义、标准格式及json字符串检验
2014/05/11 Javascript
全面解析标签页的切换方式
2016/08/21 Javascript
几句话带你理解JS中的this、闭包、原型链
2016/09/26 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
JS+Ajax实现百度智能搜索框
2017/08/04 Javascript
PHP自动加载autoload和命名空间的应用小结
2017/12/01 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
JavaScript实现滑块验证解锁
2021/01/07 Javascript
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
python中随机函数random用法实例
2015/04/30 Python
使用Python操作excel文件的实例代码
2017/10/15 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
python对象与json相互转换的方法
2019/05/07 Python
python 生成器和迭代器的原理解析
2019/10/12 Python
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
2020/04/22 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
AmazeUI 等分网格的实现示例
2020/08/25 HTML / CSS
高中美术教学反思
2014/01/19 职场文书
元宵节主持词
2014/03/25 职场文书
亮剑精神演讲稿
2014/05/23 职场文书
离职证明范本(5篇)
2014/09/19 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书
详解Laravel框架的依赖注入功能
2021/05/27 PHP
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
2022/04/19 Javascript
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python