【发布时间】:2020-02-05 03:28:18
【问题描述】:
我的 Angular 应用程序中有多个模块,每个模块都将一些相关数据存储到我的主数据中。现在,我想删除我的主数据,我也想删除所有相关数据。
所以我想有一个带有 delete 方法的服务 (service1) 和一个 observable 让其他服务知道这些数据将被删除,其他依赖服务 (service2, service3, ...) 将订阅并删除他们的相关数据
@Injectable({
providedIn: "root"
})
export class Service1Service {
deleteData$: Subject<string> = new Subject<string>();
constructor() {
console.log("Service1Service.constructor");
}
delete(id: string) {
console.log("service1.delete");
this.deleteData$.next(id);
}
}
@Injectable({
providedIn: "root"
})
export class Service2Service {
constructor(private service1: Service1Service) {
console.log("Service2Service.constructor");
this.service1.deleteData$.subscribe(id => this.delete(id));
}
delete(id: string) {
console.log("service2.delete");
}
}
export class MyComponent {
constructor(
private service1: Service1Service,
) {}
delete() {
this.service1.delete("5");
}
}
所以通过这种方式,Service2 将依赖于Service1,如果将来开发一个新模块来存储一些其他相关数据到母数据,它将是 Open/Closed。
问题是,如果我不在已加载的组件中注入 Service2,则 Angular 不会创建它们,因此它们不会订阅服务来删除数据。
我尝试使用providedIn: "root"或者直接将它们添加到app.module providers没有区别。
注意:我不希望 Service1 依赖于其他服务,即我不希望 service1 调用其他服务删除方法
【问题讨论】:
标签: angular angular-services solid-principles