≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 网络编程 > vue.js

Vue组件通信的四种方式汇总

人气:545 时间:2019-04-09

这篇文章主要为大家详细介绍了Vue组件通信的四种方式汇总,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

 

前言

 

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

  • 父子组件的通信
  • 非父子组件的eventBus通信
  • 利用本地缓存实现组件通信
  • Vuex通信

 

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

 

 

 

父组件向子组件传递数据

 

 

父组件一共需要做4件事

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

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

      3.在父组件的template应用子组件, <son></son>

      4.如果需要传递数据给子组件,就在template模板里写 <son :num="number"></son>

代码如下:


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

代码如下:


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

代码如下:


// 3.在template里使用子组件
 <son></son>

代码如下:


 // 4.如果需要传递数据,也是在templete里写
 <counter :num="number"></counter>

子组件只需要做1件事

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

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

代码如下:


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

代码如下:


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

 

子组件向父组件传递数据

 

 

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

在template里定义事件

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

代码如下:


// 1. 在templete里应用子组件时,定义事件changeNumber
 <counter :num="number"
   @changeNumber="changeNumber"
 >
 </counter>

代码如下:


// 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: '<App/>',
 data(){
 return {
 Bus : new Vue()
 }
 }
})

代码如下:


// 2.在组件1里,触发emit
increment(){
 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比较复杂,可以单独写一篇

 

总结

 

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对四海网的支持。

本文来自:http://www.q1010.com/184/4668-0.html

注:关于Vue组件通信的四种方式汇总的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:vue.js

您可能感兴趣的文章

  • vue几个常用跨域处理方式介绍
  • vue项目实战总结篇
  • vue-router配合ElementUI实现导航的实例
  • Vue+webpack项目基础配置教程
  • nginx+vue.js实现前后端分离的示例代码
  • nginx部署访问vue-cli搭建的项目的方法
  • 分析vue-admin和后端(flask)分离结合的例子
  • 浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
  • vue-router项目实战总结篇
  • Vue-cli中为单独页面设置背景色的实现方法
上一篇:vue父组件点击触发子组件事件的实例讲解
下一篇:vue几个常用跨域处理方式介绍
热门文章
  • Vue 报错TypeError: this.$set is not a function 的解决方法
  • vue实现动态添加数据滚动条自动滚动到底部的示例代码
  • vue项目设置scrollTop不起作用(总结)
  • vue项目中使用vue-i18n报错的解决方法
  • iview实现select tree树形下拉框的示例代码
  • 分析关于element级联选择器数据回显问题
  • vue项目打包后打开页面空白解决办法
  • 解决element ui select下拉框不回显数据问题的解决
  • element-ui table span-method(行合并)的实现代码
  • element-ui 设置菜单栏展开的方法
  • 最新文章
    • 理解vue ssr原理并自己搭建简单的ssr框架
    • vue favicon设置以及动态修改favicon的方法
    • vue-router启用history模式下的开发及非根目录部署方法
    • 从零开始在NPM上发布一个Vue组件的方法步骤
    • Element input树型下拉框的实现代码
    • Vue 报错TypeError: this.$set is not a function 的解决方法
    • Vue.js组件高级特性实例分析
    • 浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
    • 分析Vue.js自定义tipOnce指令用法实例
    • 浅谈vuex actions和mutation的异曲同工

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。