У меня есть несколько модулей в моем приложении angular, и каждый хранит некоторые данные, связанные с моими основными данными. Теперь я хочу удалить свои основные данные, а также все связанные данные.
Итак, я подумал о создании службы (service1
) с методом удаления и наблюдаемого, чтобы другие службы знали, что эти данные будут удалены, а другие зависимые службы (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
, и он будет открыт / закрыт, если в будущем будет разработан новый модуль для хранения некоторых других связанных данных с данными mater.
Проблема в том, что если я не добавляю Service2
в уже загруженные компоненты, angular их не создает, поэтому они не подписываются на службу для удаления данных.
Я пробовал использовать providedIn: "root"
или напрямую добавлять их в app.module providers
без разницы.
Примечание: я не хочу, чтобы Service1
зависел от других служб, т.е. я не хочу, чтобы service1 вызывал метод удаления других служб