订阅 Observable 并获取特定类型的事件
Subscribe Observable and get Events of specific type
我有以下 Angular 服务:
export class EventService {
private subject = new Subject<Event>();
send(code: EventCode, data?: any) {
this.subject.next(event);
}
clear() {
this.subject.next();
}
get(): Observable<Event> {
return this.subject.asObservable();
}
}
其中 Event 和 EventCode 是:
export class Event {
code: EventCode;
data: any;
constructor(code: EventCode, data?: any) {
this.code = code;
this.data = data;
}
}
export enum EventCode {
Created,
Deleted,
Updated
}
那我使用如下:
this.eventService.get().subscribe((event: Event) => {
// Do something
});
我希望只能订阅具有特定 EventCode
的事件。
或者可能只对具有特定 EventCode
的事件做出反应 ...
这可能吗?我该怎么做?
在我们开始之前,这个:
this.eventService.get().subscribe((event: Event) => {
// Do something
});
当组件销毁时会泄漏内存,因为您没有退订。改为这样做。
export class MyComponent implements OnInit, OnDestroy {
// store subscrition
private eventServiceSubscription: Subscription;
ngOnInit() {
this.eventServiceSubscription = this.eventService.get().subscribe((event: Event) => {
// check event code
if(event.code === 'someEventCode') {
// process event
}
});
}
ngOnDestroy() {
this.eventServiceSubscription.unsubscribe();
}
}
我有以下 Angular 服务:
export class EventService {
private subject = new Subject<Event>();
send(code: EventCode, data?: any) {
this.subject.next(event);
}
clear() {
this.subject.next();
}
get(): Observable<Event> {
return this.subject.asObservable();
}
}
其中 Event 和 EventCode 是:
export class Event {
code: EventCode;
data: any;
constructor(code: EventCode, data?: any) {
this.code = code;
this.data = data;
}
}
export enum EventCode {
Created,
Deleted,
Updated
}
那我使用如下:
this.eventService.get().subscribe((event: Event) => {
// Do something
});
我希望只能订阅具有特定 EventCode
的事件。
或者可能只对具有特定 EventCode
的事件做出反应 ...
这可能吗?我该怎么做?
在我们开始之前,这个:
this.eventService.get().subscribe((event: Event) => {
// Do something
});
当组件销毁时会泄漏内存,因为您没有退订。改为这样做。
export class MyComponent implements OnInit, OnDestroy {
// store subscrition
private eventServiceSubscription: Subscription;
ngOnInit() {
this.eventServiceSubscription = this.eventService.get().subscribe((event: Event) => {
// check event code
if(event.code === 'someEventCode') {
// process event
}
});
}
ngOnDestroy() {
this.eventServiceSubscription.unsubscribe();
}
}