(三十三)Vue之消息订阅与发布

上一篇:(三十二)Vue之全局事件总线

下一篇:(三十四)Vue之新生命周期钩子nextTick

消息订阅与发布

理解

这种方式的思想与全局事件总线很相似,一种组件间通信的方式,适用于任意组件间通信
它包含以下操作:

  • (1) 订阅消息 --对应绑定事件监听
  • (2) 发布消息 --分发事件
  • (3) 取消消息订阅 --解绑事件监听

需要引入一个消息订阅与发布的第三方实现库: PubSubJ
在线文档: https://github.com/mroderick/PubSubJS

使用步骤

第一步:使用npm i pubsub-js把第三方实现库PubSubJ安装
第二步:在用到的组件使用import pubsub from 'pubsub-js'引入
第三步:接收数据

	methods(){
        demo(data){......}
      }
    mounted() {
        this.pid = pubsub.subscribe('xxx',this.demo) //订阅消息
      }

第四步:提供数据

pubsub.publish('xxx',数据)

第五步:在beforeDestroy钩子中取消消息订阅

PubSub.unsubscribe(pid)

改造TodoList为消息订阅与发布

我们把给Item组件与App组件的交互从全局事件总线替换成消息订阅与发布
第一步:使用npm i pubsub-js安装
第二步:在Item组件与App组件使用import pubsub from 'pubsub-js'引入
第三步:Item组件提供数据

  methods:{
    handleCheck(id){
      //console.log(id)
      //通知App组件将对应的todo对象的done取反
      //this.checkTodo(id)
      //this.$bus.$emit('checkTodo',id)
      pubsub.publish('checkTodo',id)
    },
    handleDelete(id){
      if (confirm('确定删除吗?')) {
        //通知App组件将对应的todo对象
        //console.log(id)
        //this.deleteTodo(id)
        //this.$bus.$emit('deleteTodo',id)
        pubsub.publish('deleteTodo',id)
      }
    }
  }

第四步:App组件接收数据

	mounted() {
    /*this.$bus.$on('checkTodo',this.checkTodo)
    this.$bus.$on('deleteTodo',this.deleteTodo)*/
    this.pubId1 = pubsub.subscribe('checkTodo',this.checkTodo)
    this.pubId2 = pubsub.subscribe('deleteTodo',this.deleteTodo)
  }

第五步:App组件在beforeDestroy钩子中取消消息订阅

	beforeDestroy() {
    /*this.$bus.$off('checkTodo')
    this.$bus.$off('deleteTodo')*/
    pubsub.unsubscribe(this.pubId1)
    pubsub.unsubscribe(this.pubId2)
  }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忆亦何为

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值