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 相关文章推荐
兼容IE和FF的图片上传前预览js代码
May 28 Javascript
浅析js中的浮点型运算问题
Jan 06 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
Jun 08 Javascript
JavaScript中的原始值和复杂值
Jan 07 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
Feb 19 Javascript
原生js实现轮播图的示例代码
Feb 20 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
Mar 21 jQuery
Vue filter格式化时间戳时间成标准日期格式的方法
Sep 16 Javascript
Node.js API详解之 util模块用法实例分析
May 09 Javascript
你不知道的 TypeScript 高级类型(小结)
Aug 28 Javascript
vue+element table表格实现动态列筛选的示例代码
Jan 14 Vue.js
Vue中使用import进行路由懒加载的原理分析
Apr 01 Vue.js
详解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
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
php getimagesize 上传图片的长度和宽度检测代码
2010/05/15 PHP
php array的学习笔记
2012/05/10 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
js中匿名函数的N种写法
2010/09/08 Javascript
基于jQuery的试卷自动排版系统实现代码
2011/01/06 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
js设置function参数默认值(适合没有传参情况)
2014/02/24 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
2016/12/19 Javascript
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
详解webpack与SPA实践之开发环境搭建
2017/12/18 Javascript
vue文件树组件使用详解
2018/03/29 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
微信小程序当前时间时段选择器插件使用方法详解
2018/12/28 Javascript
使用webpack编译es6代码的方法步骤
2019/04/28 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
python计算N天之后日期的方法
2015/03/31 Python
Python 备份程序代码实现
2017/03/06 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
python创建子类的方法分析
2019/11/28 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
超30万乐谱下载:Musicnotes.com
2016/09/24 全球购物
学生个人自我鉴定范文
2014/03/28 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
创文明城市标语
2014/06/16 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技