У меня есть SharedModule, в массиве провайдеров которого есть несколько сервисов:
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [
EnquiriesService,
....
....
{ provide: FirestoreSettingsToken, useValue: {} }
],
};
}
}
В моем сервисе:
@Injectable({
providedIn: 'root',
})
export class EnquiriesService {
enquiries$ = this.fs.collection(`enquiries`, this.query).pipe(
tap((next) => {
const enquiries = next.filter((enq: Enquiry) => enq.status !== 'Closed');
this.store.set('enquiries', enquiries);
})
);
....
....
}
В моем компоненте:
constructor(
private enquiriesService: EnquiriesService,
...) {}
ngOnInit() {
this.subs.push(this.enquiriesService.enquiries$.subscribe())
this.enquiries$ = this.store.select<Enquiry[]>('enquiries');
}
Хранилище:
export class Store {
private subject = new BehaviorSubject<State>(state);
private store = this.subject.asObservable().pipe(distinctUntilChanged());
get value() {
return this.subject.value;
}
select<T>(name: string): Observable<T> {
return this.store.pipe(pluck(name));
}
set(name: string, state: any) {
this.subject.next({ ...this.value, [name]: state });
}
resetStore(): void {
for (const prop in state) {
if (state.hasOwnProperty(prop)) {
this.set(prop, undefined);
}
}
}
}
Теперь проблема в том, что когда пользователь выходит из платформы, а затем входит в систему с другой учетной записью, свойство enquiries$
в службе все еще имеет запросы от старого пользователя, потому что свойство не было сброшено.
async logOut() {
return this.authService.logoutUser().then(() => {
this.store.resetStore();
this.router
.navigate(['/login'])
.catch((error) => console.log(error));
});
}