Angular уничтожить / сбросить свойство сервиса - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть 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));
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...