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