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中使用&quot;with&quot;语句中跨frame的变量引用问题
Mar 08 Javascript
发布一个基于javascript的动画类 Fx.js
Nov 05 Javascript
深入理解Javascript中this的作用域
Aug 12 Javascript
JS实现点击按钮后框架内载入不同网页的方法
May 05 Javascript
JS获取鼠标相对位置的方法
Sep 20 Javascript
JS实现简单的tab切换选项卡效果
Sep 21 Javascript
jQuery中delegate()方法的用法详解
Oct 13 Javascript
js微信支付实现代码
Dec 22 Javascript
微信小程序获取用户信息并保存登录状态详解
May 10 Javascript
手写Vue弹窗Modal的实现代码
Sep 11 Javascript
jQuery操作动画完整实例分析
Jan 10 jQuery
vue props 单项数据流实例分享
Feb 16 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中计算中文字符串长度、截取中文字符串的函数代码
2011/08/09 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
jQuery初学:find()方法及children方法的区别分析
2011/01/31 Javascript
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
广泛收集的jQuery拖放插件集合
2012/04/09 Javascript
前端必备神器 Snap.svg 弹动效果
2014/11/10 Javascript
js+html5通过canvas指定开始和结束点绘制线条的方法
2015/06/05 Javascript
JS简单实现无缝滚动效果实例
2016/08/24 Javascript
javascript如何创建对象
2016/08/29 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
vue-cli如何添加less 以及sass
2017/07/06 Javascript
Vue中用JSON实现刷新界面不影响倒计时
2020/10/26 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
原生js实现表格循环滚动
2020/11/24 Javascript
python中self原理实例分析
2015/04/30 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
python爬取淘宝商品详情页数据
2018/02/23 Python
Python爬虫框架Scrapy实例代码
2018/03/04 Python
Python 字典中的所有方法及用法
2020/06/10 Python
解决Keras 自定义层时遇到版本的问题
2020/06/16 Python
使用TensorBoard进行超参数优化的实现
2020/07/06 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
华丽的手绘陶瓷:MacKenzie-Childs
2017/02/04 全球购物
世界领先的艺术图书出版社:TASCHEN
2018/07/23 全球购物
街头时尚在线:JESSICABUURMAN
2019/06/16 全球购物
Nike瑞士官网:Nike CH
2021/01/18 全球购物
自我评价的正确写法
2013/09/19 职场文书
给国外客户的邀请函
2014/01/30 职场文书
党的群众路线教育实践活动对照检查材料(四风)
2014/09/27 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
2016年教代会开幕词
2016/03/04 职场文书
Rust中的Struct使用示例详解
2022/08/14 Javascript