企业网站定制开发【Vue组件间通信】 全局事件总线、订阅与发布

目录


一、

作用

企业网站定制开发一种组件间通信的方式 企业网站定制开发适用于任意组件间通信。

安装

企业网站定制开发安装全局事件总线:企业网站定制开发在入口文件main.js中,给VM添加$bus,任意组件都可以在原型中调用。

  1. new Vue({
  2. render: h => h(App),
  3. beforeCreate(){
  4. Vue.prototype.$bus = this
  5. }
  6. }).$mount('#app')

组件使用案例

案例分析

创建两个子组件,如下组件,其中注释内容是演示订阅与发布无视即可

下面代码所演示的是,小明组件给小红组件姓名“小明”,小红组件给小明组件“年龄”,主要通过自定义事件,其中小明组件自定义“getName”,需要传递给小红组件,小红组件就需要“getName”来接收,也可以销毁传递

发送代码如下

this.$bus.$emit('getName',this.name)//this.name是所要传递的值,

接收代码如下

  1. this.$bus.$on('getName',(name)=>{
  2.             console.log( '小红得到的名字',name);
  3.           })

销毁代码如下

需要一个点击事件来触发

this.$bus.$off('getName')

组件一(小明)

  1. <template>
  2. <div>
  3. 姓名:{{name}}年龄:{{age}}<button @click="sendMsg">给小红组件传姓名</button> <button @click="del">销毁传递</button>
  4. </div>
  5. </template>
  6. <script>
  7. // import pubsub from 'pubsub-js'
  8. export default {
  9. name: 'XiaoMing',
  10. data(){
  11. return{
  12. name:'小明',
  13. age:20
  14. }
  15. },
  16. methods:{
  17. sendMsg(){
  18. // pubsub.publish('usname',this.name)
  19. this.$bus.$emit('getName',this.name)
  20. },
  21. del(){
  22. this.$bus.$off('getName')
  23. console.log('已销毁');
  24. }
  25. },
  26. mounted(){
  27. // pubsub.subscribe('age',(e,page)=>{
  28. // console.log('小明得到小红',e,page);
  29. // })
  30. this.$bus.$on('getAge',(age)=>{
  31. console.log('小明得到的年龄',age);
  32. })
  33. }
  34. }
  35. </script>
  36. <style>
  37. </style>

组件二(小红)

  1. <template>
  2. <div>
  3. 姓名:{{name}}年龄:{{age}} <button @click="sendAge">给小明组件传年龄</button><button >取消订阅</button>
  4. </div>
  5. </template>
  6. <script>
  7. // import pubsub from 'pubsub-js'
  8. export default {
  9. name:'XiaoHong',
  10. data(){
  11. return{
  12. name:'小红',
  13. age:18
  14. }
  15. },
  16. methods:{
  17. sendAge(){
  18. // pubsub.publish('age',this.age)
  19. this.$bus.$emit('getAge',this.age)
  20. },
  21. // noRead(){
  22. // pubsub.unsubscribe(this.del)
  23. // }
  24. },
  25. mounted(){
  26. // this.del=pubsub.subscribe('usname',(q,msg)=>{
  27. // console.log('小红得到小明',q,msg)
  28. // }),
  29. this.$bus.$on('getName',(name)=>{
  30. console.log( '小红得到的名字',name);
  31. })
  32. },
  33. }
  34. </script>
  35. <style>
  36. </style>

效果展示

二、订阅与发布 

安装

一种组件间通信的方式,适用于任意组件间通信,如今有很多消息订阅与发布的包,在这里只介绍一种,pubsub-js。

打开终端输入命令:npm i pubsub-js

组件使用案例

案例分析

通过订阅与发布的方式,小明组件给小红组件姓名,小红组件给小明组件年龄

第一步我们需要引入: import pubsub from 'pubsub-js'

第二步通过在小明组件发布

pubsub.publish('usname',this.name) //usname:发布消息的名称,第二个参数:为发布内容

第三步在小红组件订阅

  1. this.del=pubsub.subscribe('usname',(q,msg)=>{
  2. console.log('小红得到小明',q,msg)
  3. })

第四步想要取消订阅,自定义事件,绑定销毁,通过第三步的this.del

pubsub.unsubscribe(this.del)

组件一(小明)

  1. <template>
  2. <div>
  3. 姓名:{{name}}年龄:{{age}}<button @click="sendMsg">给小红组件传姓名</button> <button >销毁传递</button>
  4. </div>
  5. </template>
  6. <script>
  7. import pubsub from 'pubsub-js'
  8. export default {
  9. name: 'XiaoMing',
  10. data(){
  11. return{
  12. name:'小明',
  13. age:20
  14. }
  15. },
  16. methods:{
  17. sendMsg(){
  18. pubsub.publish('usname',this.name)
  19. // this.$bus.$emit('getName',this.name)
  20. },
  21. // del(){
  22. // this.$bus.$off('getName')
  23. // console.log('已销毁');
  24. // }
  25. },
  26. mounted(){
  27. pubsub.subscribe('age',(e,page)=>{
  28. console.log('小明得到小红',e,page);
  29. })
  30. // this.$bus.$on('getAge',(age)=>{
  31. // console.log('小明得到的年龄',age);
  32. // })
  33. }
  34. }
  35. </script>
  36. <style>
  37. </style>

组件二(小红)

  1. <template>
  2. <div>
  3. 姓名:{{name}}年龄:{{age}} <button @click="sendAge">给小明组件传年龄</button><button @click="noRead">取消订阅</button>
  4. </div>
  5. </template>
  6. <script>
  7. import pubsub from 'pubsub-js'
  8. export default {
  9. name:'XiaoHong',
  10. data(){
  11. return{
  12. name:'小红',
  13. age:18
  14. }
  15. },
  16. methods:{
  17. sendAge(){
  18. pubsub.publish('age',this.age)
  19. // this.$bus.$emit('getAge',this.age)
  20. },
  21. noRead(){
  22. pubsub.unsubscribe(this.del)
  23. }
  24. },
  25. mounted(){
  26. this.del=pubsub.subscribe('usname',(q,msg)=>{
  27. console.log('小红得到小明',q,msg)
  28. })
  29. // this.$bus.$on('getName',(name)=>{
  30. // console.log( '小红得到的名字',name);
  31. // })
  32. },
  33. }
  34. </script>
  35. <style>
  36. </style>

效果展示

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发