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 选择器部分整理
Oct 28 Javascript
jquery插件jquery.confirm弹出确认消息
Dec 22 Javascript
jquery 判断div show的状态实例
Dec 03 Javascript
js Canvas实现的日历时钟案例分享
Dec 25 Javascript
简单实现JavaScript弹幕效果
Aug 27 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
Dec 12 Javascript
vue-infinite-loading2.0 中文文档详解
Apr 08 Javascript
JavaScript 正则命名分组【推荐】
Jun 07 Javascript
JS函数内部属性之arguments和this实例解析
Oct 07 Javascript
微信小程序下拉框功能的实例代码
Nov 06 Javascript
ES6函数和数组用法实例分析
May 23 Javascript
jquery实现点击左右按钮切换图片
Jan 27 jQuery
详解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使用curl获取https请求的方法
2015/02/11 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
2019/05/21 PHP
解密效果
2006/06/23 Javascript
Jquery replace 字符替换实现代码
2010/12/02 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
移动端横屏的JS代码(beta)
2016/05/16 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
2016/09/08 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
微信小程序商品到详情的实现
2017/06/27 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
vue的路由映射问题及解决方案
2019/10/14 Javascript
es6中new.target的作用和使用场景简单示例分析
2020/03/14 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
利用js canvas实现五子棋游戏
2020/10/11 Javascript
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
2021/01/29 Javascript
在Windows8上的搭建Python和Django环境
2014/07/03 Python
微信跳一跳辅助python代码实现
2018/01/05 Python
python爬取网页转换为PDF文件
2018/06/07 Python
Pycharm设置utf-8自动显示方法
2019/01/17 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
Booking.com荷兰:全球酒店网上预订
2017/08/22 全球购物
奇怪的鱼:Weird Fish
2018/03/18 全球购物
物流管理应届生求职信
2013/11/07 职场文书
迎接领导欢迎词
2014/01/11 职场文书
战友聚会邀请函
2014/01/18 职场文书
房地产促销活动方案
2014/03/01 职场文书
活动总结报告范文
2014/05/04 职场文书
2014国庆黄金周超市促销活动方案
2014/09/21 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书
2015年销售助理工作总结
2015/05/11 职场文书