vue2.0组件之间传值、通信的多种方式(干货)


Posted in Javascript onFebruary 10, 2018

Vue中组件这个特性让不少前端er非常喜欢,我自己也是其中之一,它让前端的组件式开发更加合理和简单。这次我们就来聊一聊vue2.0组件之间传值、通信的多种方式。

一、通过路由带参数进行传值

①两个组件 A和B,A组件通过query把orderId传递给B组件(触发事件可以是点击事件、钩子函数等)

this.$router.push({ path: '/conponentsB', query: { orderId: 123 } }) // 跳转到B

②在B组件中获取A组件传递过来的参数

this.$route.query.orderId

二、通过设置 Session Storage缓存的形式进行传递

①两个组件A和B,在A组件中设置缓存orderData

const orderData = { 'orderId': 123, 'price': 88 }
sessionStorage.setItem('缓存名称', JSON.stringify(orderData))

②B组件就可以获取在A中设置的缓存了

const orderData = { 'orderId': 123, 'price': 88 }
sessionStorage.setItem('缓存名称', JSON.stringify(orderData))const orderData = { 'orderId': 123, 'price': 88 }
sessionStorage.setItem('缓存名称', JSON.stringify(orderData))

此时 dataB 就是数据 orderData

朋友们可以百度下 Session Storage(程序退出销毁) 和 Local Storage(长期保存) 的区别。

三、父子组件之间的传值

(一)父组件往子组件传值props

①定义父组件,父组件传递 number这个数值给子组件,如果传递的参数很多,推荐使用json数组{}的形式

vue2.0组件之间传值、通信的多种方式(干货)

②定义子组件,子组件通过 props方法获取父组件传递过来的值。props中可以定义能接收的数据类型,如果不符合会报错。

vue2.0组件之间传值、通信的多种方式(干货)

③假如接收的参数 是动态的,比如 input输入的内容 v-model的形式

注意:传递的参数名称不识别驼峰命名,推荐使用横杠-命名

vue2.0组件之间传值、通信的多种方式(干货)

vue2.0组件之间传值、通信的多种方式(干货)

(二)、子组件往父组件传值,通过emit事件

vue2.0组件之间传值、通信的多种方式(干货)

vue2.0组件之间传值、通信的多种方式(干货)

四、不同组件之间传值,通过eventBus(小项目少页面用eventBus,大项目多页面使用 vuex)

①定义一个新的vue实例专门用于传递数据,并导出

vue2.0组件之间传值、通信的多种方式(干货)

②定义传递的方法名和传输内容,点击事件或钩子函数触发eventBus.emit事件

vue2.0组件之间传值、通信的多种方式(干货)

③接收传递过来的数据

注意:enentBus是一个另一个新的Vue实例,区分两个this所代表得vue实例

vue2.0组件之间传值、通信的多种方式(干货)

五、vuex进行传值

为什么使用vuex?

vuex主要是是做数据交互,父子组件传值可以很容易办到,但是兄弟组件间传值(兄弟组件下又有父子组件),或者大型spa单页面框架项目,页面多并且一层嵌套一层的传值,异常麻烦,用vuex来维护共有的状态或数据会显得得心应手。

需求:两个组件A和B,vuex维护的公共数据是 餐馆的名称 resturantName,默认餐馆名称是 飞歌餐馆,那么现在A和B页面显示的就是飞歌餐馆。如果A修改餐馆名称 为 A餐馆,则B页面显示的将会是  A餐馆,反之B修改同理。这就是vuex维护公共状态或数据的魅力,在一个地方修改了数据,在这个项目的其他页面都会变成这个数据。

vue2.0组件之间传值、通信的多种方式(干货)vue2.0组件之间传值、通信的多种方式(干货)

①首先新建一个 sotre文件夹,分开维护 actions mutations getters

vue2.0组件之间传值、通信的多种方式(干货)

②在index.js文件中新建vuex 的store实例

*as的意思是 导入这个文件里面的所有内容,就不用一个个实例来导入了。

vue2.0组件之间传值、通信的多种方式(干货)

③在main.js中导入 store实例

vue2.0组件之间传值、通信的多种方式(干货)

④在组件A中,定义点击事件,点击 修改 餐馆的名称,并把餐馆的名称在事件中用参数进行传递。

...mapactions 和 ...mapgetters都是vuex提供的语法糖,在底层已经封装好了,拿来就能用,简化了很多操作。

其中...mapActions(['clickAFn']) 相当于this.$store.dispatch('clickAFn',{参数}),mapActions中只需要指定方面即可,参数省略。

...mapGetters(['resturantName'])相当于this.$store.getters.resturantName

vue2.0组件之间传值、通信的多种方式(干货)

    B组件同理

vue2.0组件之间传值、通信的多种方式(干货)

⑤actions中的操作,为了方便理解,ES6的箭头函数换成了比较好理解的函数,commit提交到mutations中

vue2.0组件之间传值、通信的多种方式(干货)

⑥mutations,mutations值所有vuex步骤中唯一能改变数据的操作,在其他步骤修改都是非法的。

在此步骤中,把组件中传递过来的  餐馆名称赋值给了vuex共同维护的状态 resturantName,这时所有的resturantName都变成了餐馆A

vue2.0组件之间传值、通信的多种方式(干货)

⑦在getter中获取最终的状态

vue2.0组件之间传值、通信的多种方式(干货)

⑧在计算属性中,渲染最终的数据 resturantName

vue2.0组件之间传值、通信的多种方式(干货)

总结

以上所述是小编给大家介绍的vue2.0组件之间传值、通信的多种方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
获得所有表单值的JQuery实现代码[IE暂不支持]
May 24 Javascript
js实现网站首页图片滚动显示
Feb 04 Javascript
jQuery取得select选择的文本与值的示例
Dec 09 Javascript
jQuery中选择器小问题(新人难免遇到)
Mar 31 Javascript
js实现特定位取反原理及示例
Jun 30 Javascript
jQuery中delegate()方法用法实例
Jan 19 Javascript
JavaScript简单修改窗口大小的方法
Aug 03 Javascript
JavaScript代码性能优化总结(推荐)
May 16 Javascript
JS常用字符串方法(推荐)
Jan 15 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
Mar 10 Javascript
ES6 class的应用实例分析
Jun 27 Javascript
用vite搭建vue3应用的实现方法
Feb 22 Vue.js
webpack 4.0.0-beta.0版本新特性介绍
Feb 10 #Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
Feb 10 #Javascript
Vue组件和Route的生命周期实例详解
Feb 10 #Javascript
Vue2.0用户权限控制解决方案的示例
Feb 10 #Javascript
vue.js 微信支付前端代码分享
Feb 10 #Javascript
详解如何实现一个简单的 vuex
Feb 10 #Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
Feb 10 #Javascript
You might like
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
2021/03/09 Servers
js验证表单大全
2006/11/25 Javascript
jQuery setTimeout()函数使用方法
2013/04/07 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
IE浏览器中图片onload事件无效的解决方法
2014/04/29 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
Jquery中基本选择器用法实例详解
2015/05/18 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
2018/09/12 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
vue实现计步器功能
2019/11/01 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
vue-cli3中配置alias和打包加hash值操作
2020/09/04 Javascript
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
编程语言Python的发展史
2014/09/26 Python
在Python中使用SQLite的简单教程
2015/04/29 Python
在Django中创建动态视图的教程
2015/07/15 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
Python设计模式之桥接模式原理与用法实例分析
2019/01/10 Python
一篇文章了解Python中常见的序列化操作
2019/06/20 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
HTML5实现预览本地图片
2016/02/17 HTML / CSS
ToysRus日本官网:玩具反斗城
2018/09/08 全球购物
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
财务主管自我鉴定
2014/01/17 职场文书
区三好学生主要事迹
2014/01/30 职场文书
甜品店创业计划书
2014/08/14 职场文书
辞职信标准格式
2015/02/27 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL