Angular下的一种发布订阅模式

这篇博客介绍了如何利用Angular的发布订阅模式在组件间实现通信。通过创建一个`ShareMsgService`服务,使用`Subject`进行消息传递,实现了在A组件中发布消息,B组件订阅并处理相应消息的功能。同时强调了`clearMessage`方法用于释放资源的重要性,以及在组件销毁时解除订阅以避免内存泄漏。
摘要由CSDN通过智能技术生成

前言

	发布订阅模式,给任意关系的组件之间(传值,通知对方执行方法)提供了极大的便利(父子,孙子,兄弟),
	它不用考虑组件之间的调用关系,因此非常方便。

正文

1. 定义share-msg.service.ts文件

import { Injectable } from '@angular/core';
import { Observable, Subject } from 'rxjs';
@Injectable({
  providedIn: 'root'
})
export class ShareMsgService {
  constructor() { }
  private msg = new Subject<any>();
  //发送消息
  sendMessage(message: any) {
    this.msg.next(message);
  }
  //清除消息
  clearMessage() {
    this.msg.next();
  }
  //获取消息
  getMessage(): Observable<any> {
    return this.msg.asObservable();
  }
}

说明:
· sendMessage()
发布消息
· getMessage() :
订阅消息
· clearMessage():
清除消息,用完即毁,节省资源

2. A文件中发布消息

...
import { ShareMsgService } from '@app/shared/service/share-msg.service';
...
  constructor(
    private sms: ShareMsgService,
  ) { }
...

  submitQuery() {
    //这是我的一个业务方法
	//sendMessage()中的参数可以自定义,自己按照
    this.sms.sendMessage({ type: "lj_search_update", data:{test:"testValue"}})
   
  }

3. B文件中订阅消息

...
import { ShareMsgService } from '@app/shared/service/share-msg.service';
import { Subscription } from 'rxjs';
...
constructor(
    private sms: ShareMsgService,
  ) {
    this.subscription = this.sms.getMessage().subscribe(data => {
      if (data.type == "lj_search_update") {
    	//此处处理你的业务逻辑
      }
    })
  }
 ...
 //记得用完即毁,这个时angular生命周期的一个钩子
 ngOnDestroy(): void {
    this.subscription.unsubscribe();
  }

没了,就是这些了,当然你还可以选择其他的一些方式,比如@Input()、@Output()、eventEmitter等。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值