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 相关文章推荐
Jquery 插件学习实例1 插件制作说明与tableUI优化
Apr 02 Javascript
JQuery each()函数如何优化循环DOM结构的性能
Dec 10 Javascript
使用javascipt---实现二分查找法
Apr 10 Javascript
从jquery的过滤器.filter()方法想到的
Sep 29 Javascript
jQuery层级选择器用法分析
Feb 10 Javascript
Javascript 高阶函数使用介绍
Jun 15 Javascript
微信企业号开发之微信考勤Cookies的使用
Sep 11 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
Nov 04 Javascript
基于jQuery实现简单的折叠菜单效果
Nov 23 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
Sep 27 Javascript
vue 进阶之实现父子组件间的传值
Apr 26 Javascript
Node.js API详解之 V8模块用法实例分析
Jun 05 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
广播爱好者需要了解的天线知识
2021/03/01 无线电
用php+mysql一个名片库程序
2006/10/09 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
php生成txt文件实例代码介绍
2016/04/28 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
你必须知道的Javascript知识点之&quot;单线程事件驱动&quot;的使用
2013/04/23 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
jQuery niceScroll滚动条错位问题的解决方法
2018/02/03 jQuery
VUE中V-IF条件判断改变元素的样式操作
2020/08/09 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
2015/05/15 Python
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
[原创]pip和pygal的安装实例教程
2017/12/07 Python
Python使用add_subplot与subplot画子图操作示例
2018/06/01 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
医学院学生的自我评价分享
2013/11/19 职场文书
儿子婚宴答谢词
2014/01/09 职场文书
和解协议书
2014/04/16 职场文书
数学教育专业求职信
2014/07/22 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
2019个人工作总结
2019/06/21 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS