I have multiple modules in my angular app and each is storing some related data to my master data. Now, I want to delete my master data and I want to delete all related data too.
So I was thinking to have a service (service1) with delete method and an observable to let other services know this data is going to be deleted and other dependent services (service2, service3, ...) will subscribe and delete their related data
@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");
}
}
So in this way, Service2 will be dependents on Service1, and it will be Open/Closed if in future a new moudle is developed to store some other related data to mater data.
The issue is if I don't inject Service2 in the components that already loaded, angular doesn't create them, so they don't subscribe to service to delete data.
I tried by using providedIn: "root" or directly add them to app.module providers no difference.
Note: I don't want Service1 be depends on other services ie I don't want service1 calls other services delete method