本週為了 icon 把 Ionic 4 升級到 5 了,有點吃飽了沒事幹,升級之後才想到 Events 淘汰了,評估過後決定改用 RxJS 的 Subject 來替換原本的功能,底下就簡單紀錄一下相關寫法。
先看看原本 Events 的寫法,訂閱:
constructor(
private event: Events,
) {
this.event.subscribe('event:', (data) => {
console.log(data)
});
}
發送:
this.event.publish('event:', 'gogo');
現在要換成 RxJS,先建立 service:
import {Injectable} from '@angular/core';
import {Subject} from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class Service {
result = new Subject();
constructor() {
}
receive(result) {
this.result.next(result);
}
}
訂閱:
this.service.result.subscribe((res: any) => {
console.log(res);
});
發送:
save(data) {
this.service.receive(data);
}
RxJS 的 Subject 還有其他幾種,BehaviorSubject、ReplaySubject、AsyncSubject,大家可以在 Google 看看相關差異,找到適合自己情境的用法。