Vue组件通信(详细教程)

这篇文章主要给大家介绍了关于vue组件通信的四种方式,分别是父子组件通信、非父子组件的eventbus通信、利用localstorage或者sessionstorage以及利用vuex等方法,需要的朋友可以参考借鉴,下面一起学习学习吧。

前言

众所周知vue是一种mvvm框架,它相对于jquery可能比较大的差异点之一就在于组件之间的通信了。本文重点是梳理了前两个,父子组件通信和eventBus通信,我觉得Vue文档里的说明还是有一些简易,我自己第一遍是没看明白。

父子组件的通信

非父子组件的eventBus通信

立即学习“前端免费学习笔记(深入)”;

利用本地缓存实现组件通信

Vuex通信

第一种通信方式:父子组件通信

父组件向子组件传递数据

父组件一共需要做4件事

      1.import son from ‘./son.js’ 引入子组件 son

      2.在components : {“son”} 里注册所有子组件名称

      3.在父组件的template应用子组件,

      4.如果需要传递数据给子组件,就在template模板里写

 // 1.引入子组件  import counter from './counter' import son from './son'

登录后复制

// 2.在ccmponents里注册子组件 components : { counter, son },

登录后复制

// 3.在template里使用子组件 

登录后复制

 // 4.如果需要传递数据,也是在templete里写 

登录后复制

子组件只需要做1件事

      1.用props接受数据,就可以直接使用数据

      2.子组件接受到的数据,不能去修改。如果你的确需要修改,可以用计算属性,或者把数据赋值给子组件data里的一个变量

 // 1.用Props接受数据 props: [  'num'  ],

登录后复制

// 2.如果需要修改得到的数据,可以这样写 props: [  'num' ], data () { return {  number : this.num } },

登录后复制

子组件向父组件传递数据

父组件一共需要做2件事情

在template里定义事件

在methods里写函数,监听子组件的事件触发

// 1. 在templete里应用子组件时,定义事件changeNumber  

登录后复制

// 2. 用changeNumber监听事件是否触发 methods: {  changeNumber(e){  console.log('子组件emit了',e);  this.number = e  }, }

登录后复制

子组件一共需要1件事情

在数据变化后,用$emit触发即可

// 1. 子组件在数据变化后,用$emit触发即可,第二个参数可以传递参数 methods: {  increment(){   this.number++   this.$emit('changeNumber', this.number)  }, }

登录后复制

第二种通信方式: eventBus

eventBus这种通信方式,针对的是非父子组件之间的通信,它的原理还是通过事件的触发和监听。

但是因为是非父子组件的关系,他们需要有一个中间组件来连接。

我是使用的通过在根组件,也就是#app组件上定义了一个所有组件都可以访问到的组件,具体使用方式如下

使用eventBus传递数据,我们一共需要做3件事情

      1.给app组件添加Bus属性 (这样所有组件都可以通过this.$root.Bus访问到它,而且不需要引入任何文件)

      2.在组件1里,this.$root.Bus.$emit触发事件

      3.在组件2里,this.$root.Bus.$on监听事件

// 1.在main.js里给app组件,添加bus属性import Vue from 'vue'new Vue({ el: '#app', components: { App }, template: '', data(){ return { Bus : new Vue() } }})

登录后复制

// 2.在组件1里,触发emitincrement(){ this.number++ this.$root.Bus.$emit('eventName', this.number) },

登录后复制

// 3.在组件2里,监听事件,接受数据mounted(){ this.$root.Bus.$on('eventName', value => { this.number = value console.log('busEvent'); })},

登录后复制

第三种通信方式: 利用localStorage或者sessionStorage

这种通信比较简单,缺点是数据和状态比较混乱,不太容易维护。

通过window.localStorage.getItem(key) 获取数据

通过window.localStorage.setItem(key,value) 存储数据

注意:用JSON.parse() / JSON.stringify() 做数据格式转换。

第四种通信方式: 利用Vuex

Vuex比较复杂,可以单独写一篇

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

利用SpringMVC解决vue跨域请求

利用SpringMVC解决vue跨域请求

利用SpringMVC解决vue跨域请求

以上就是Vue组件通信(详细教程)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3187619.html

(0)
上一篇 2025年3月31日 23:12:08
下一篇 2025年3月31日 23:12:18

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Vue Socket.io源码详细分析

    这篇文章主要介绍了vue socket.io源码解读,现在分享给大家,也给大家做个参考。 背景 有一个项目,今年12月份开始重构,项目涉及到了socket。但是socket用的是以前一个开发人员封装的包(这个一直被当前的成员吐槽为什么不用已…

    2025年3月31日
    100
  • 在Vue中通过Element使用icon图标

    element-ui自带的图标库不够全,还是需要需要引入第三方icon。下面我给大家带来了vue element使用icon图标教程,感兴趣的朋友一起看看吧 element-ui自带的图标库还是不够全,还是需要需要引入第三方icon,自己在…

    2025年3月31日 编程技术
    100
  • 在vue中如何实现动态绑定图片以及data返回图片路径

    下面我就为大家分享一篇vue中如何动态绑定图片,vue中通过data返回图片路径的方法,具有很好的参考价值,希望对大家有所帮助。 在项目中遇到需要动态加载图片路径,图片路径并非是从后台获取过来的数据。 因此在data中必须用require加…

    2025年3月31日
    100
  • 在vue中如何实现动态改变静态图片以及请求网络图片

    下面我就为大家分享一篇vue 动态改变静态图片以及请求网络图片的实现方法,具有很好的参考价值,希望对大家有所帮助。 在本身的项目中需要动态请求后端图片 一般需要在created中写因为beforeCreate的时候图片过不来的,如果想在这时…

    编程技术 2025年3月31日
    100
  • 在vue中预加载watch用法

    下面我就为大家分享一篇vue进行图片的预加载watch用法实例讲解,具有很好的参考价值,希望对大家有所帮助。 watch应用场景 我想信图片预加载大家肯定都有接触过,当图片量大的时候,为了保证页面图片都加载出来的时候,我们才把主页面给显示出…

    编程技术 2025年3月31日
    100
  • vue跨域处理问题(详细教程)

    本篇文章给大家详细介绍了vue跨域处理问题的方式以及相关知识点介绍,对此有兴趣的朋友学习下。 设置express代理请求 在基于vue-cli的项目中,在开发环境配置(config/dev.env.js)中设置代理,能够将所有/apidom…

    编程技术 2025年3月31日
    100
  • 在Vue中封装Swiper如何实现图片轮播

    图片轮播是前端中经常需要实现的一个功能。最近学习vue.js,就针对swiper进行封装,实现一个简单的图片轮播组件。感兴趣的朋友一起学习吧 图片轮播是前端中经常需要实现的一个功能。最近学习Vue.js,就针对Swiper进行封装,实现一个…

    2025年3月31日
    100
  • 在vue中如何使用ztree(详细教程)

    这篇文章主要介绍了vue中如何使用ztree,包括配置package.json,自动加载jquery的方法,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下 下面给大家介绍vue ztree 结合使用方法,一起看看吧! 配置…

    编程技术 2025年3月31日
    100
  • vue的defineProperty属性使用

    这次给大家带来vue的defineProperty属性使用,vue的defineProperty属性使用注意事项有哪些,下面就是实战案例,一起来看一下。 1.原理 vue的双向数据绑定的原理相信大家都十分了解;主要是通过ES5的Object…

    2025年3月31日
    100
  • vue中有哪些循环遍历指令

    这次给大家带来vue中有哪些循环遍历指令,vue循环遍历指令的注意事项有哪些,下面就是实战案例,一起来看一下。 vue中循环遍历使用的指令是v-for 1.v-for遍历数组 (1)value in arr 遍历数组中的元素 (2)(val…

    2025年3月31日
    100

发表回复

登录后才能评论