【发布时间】:2020-06-23 21:37:42
【问题描述】:
我需要使用 RxJs 和 Observables 维护无状态服务。所以我这样做了:
注意:这里我需要以 Reactive 方式生成一个工单编号,并将其存储在 LocalStorage 中,以避免 Id 在浏览器刷新/ App Killed 用例时丢失。
我的疑问是我创建无状态服务的方法是否正确?如果不是最好的方法是什么?
注意:一切正常。但我需要知道我在这个架构上是否正确?
work-orders-data.Service.ts
@Injectable({
providedIn: 'root'
})
export class WorkOrdersDataService {
private workOrderNumber: number = 1;
private workOrderNumberSubject$: BehaviorSubject<number> = new BehaviorSubject<number>(this.workOrderNumber);
workOrderNumberChanged$: Observable<number> = this.workOrderNumberSubject$.asObservable();
constructor(
private storage: Storage,
) { }
setDefaultWorkOrderNumber(workOrderNumber: number): void {
this.workOrderNumber = workOrderNumber;
}
setWorkOrderNumber(): void {
this.workOrderNumber += 1;
this.workOrderNumberSubject$.next(this.workOrderNumber);
this.storage.set(LocalStorageConstant.WORK_ORDER_NUMBER, this.workOrderNumber);
}
}
app.component.ts
async initializeApp(): Promise<void> {
this.workOrdersDataService.setDefaultWorkOrderNumber(Number(await this.storage.get(LocalStorageConstant.WORK_ORDER_NUMBER)));
}
work-order.component.ts
createWorkOrder(): void {
this.workOrdersDataService.setWorkOrderNumber(); // to generate new work order no.
this.workOrdersDataService.workOrderNumberChanged$.subscribe((res: number) => {
const workOrderNumber: string = environment.companyEnvironment.workOrderPrefix + res; // work order no. creation
});
}
【问题讨论】:
-
你测试了吗?它工作吗?
-
@jonrsharpe 一切正常。但我需要知道我在这个架构上是否正确。
-
如果
this.storage.set(....)是同步操作,这看起来是让 ylur 代码反应的好方法。您可能只想将您在createWorkOrder()中创建的订阅发送至unsubscribe。关于 TypeScript 风格的最后一点:您可能不需要定义您初始化的变量的类型。workOrderNumber = 1等价于workOrderNumber: number = 1。一旦你用1初始化它,TS 就知道workOrderNumber是一个数字。
标签: angular typescript ionic-framework rxjs observer-pattern