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 xMarquee实现文字水平无缝滚动效果
Apr 29 Javascript
Node.js 异步编程之 Callback介绍(一)
Mar 30 Javascript
JS简单实现动画弹出层效果
May 05 Javascript
javascript操作ul中li的方法
May 14 Javascript
javascript中的Function.prototye.bind
Jun 25 Javascript
jQuery实现Tab选项卡切换效果简单演示
Nov 23 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
Jul 12 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
Jul 22 Javascript
JS简单实现数组去重的方法分析
Oct 14 Javascript
了解javascript中let和var及const关键字的区别
May 24 Javascript
微信小程序前端自定义分享的实现方法
Jun 13 Javascript
基于layui内置模块(element常用元素的操作)
Sep 20 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
提取HTML标签
2006/10/09 PHP
php之对抗Web扫描器的脚本技巧
2008/10/01 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
2015/12/14 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
JavaScript 学习笔记(十二) dom
2010/01/21 Javascript
js 替换功能函数,用正则表达式解决,js的全部替换
2010/12/08 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
IE8下String的Trim()方法失效的解决方法
2013/11/08 Javascript
jquery cookie的用法总结
2013/11/18 Javascript
Javascript学习笔记之函数篇(四):arguments 对象
2014/11/23 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
Bootstrap导航栏各元素操作方法(表单、按钮、文本)
2015/12/28 Javascript
javascript简单比较日期大小的方法
2016/01/05 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
typescript配置alias的详细步骤
2020/08/12 Javascript
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
Python 做曲线拟合和求积分的方法
2018/12/29 Python
python内存动态分配过程详解
2019/07/15 Python
深入了解Django View(视图系统)
2019/07/23 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
HTML5不支持frameset的两种解决方法
2016/11/14 HTML / CSS
携程英文网站:Trip.com
2017/02/07 全球购物
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
关于母亲节的感言
2014/02/04 职场文书
工厂会计员职责
2014/02/06 职场文书
中式结婚主持词
2014/03/14 职场文书
房屋出租协议书范本(标准版)
2014/09/24 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
2015年公司后勤管理工作总结
2015/05/13 职场文书
《给予树》教学反思
2016/03/03 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers