角度销毁/重置服务属性

时间:2020-04-17 13:37:23

标签: angular firebase service

我有一个SharedModule,它的providers数组中有很多服务,如下所示:

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));
    });
  }

0 个答案:

没有答案
相关问题