我有一个服务注入组件(我的数据存储),从其他http服务提供数据。您可以通过延迟加载路由配置(loadChildren)访问此组件。服务没有被破坏(或刷新,清理......)当不需要
当用户注销(到另一个不同的路由)并立即用不同的用户登录(一个人可以维护两个用户)时,商店服务在(旧用户)之前提供相同的数据,当我认为它应该收取新的数据(新用户)。
我认为当服务观察者被销毁(在ngOnDestroy中)时用户注销时服务应该被“销毁”,并且注入不需要再次构建服务。
我知道组件可以通过另一种方法从服务中获取新鲜数据,但我认为服务已经应该从Constructor-ngOnInt获取数据。问题是服务没有被破坏,红外线......数据仍然来自旧用户。
这是我的代码。
组件
constructor(
public busquedasStore: BusquedasStore) { }
ngOnInit() {
this.busquedasSubs = this.busquedasStore.busquedas.subscribe(b => {
this.busquedas = b;
})
ngOnDestroy() {
this.busquedasSubs.unsubscribe();
}
服务
import { Injectable } from "@angular/core";
import { Observable } from "rxjs/Observable";
import { BehaviorSubject } from "rxjs/BehaviorSubject";
import { UserService } from '../../core/user.service';
@Injectable()
export class BusquedasStore {
busquedas$: BehaviorSubject<{}[]> = new BehaviorSubject([]);
constructor(
public userService:UserService
) {
this.cargarDatosIni();
}
cargarDatosIni() {
this.userService.me().subscribe((res) => {
let busquedas:{}[] = res.user.busqueda;
this.busquedas$.next(busquedas);
},err => {
console.log(err);
});
}
get busquedas(): Observable<{}[]> {
return this.busquedas$;
}
服务是单身,它们的生命周期是组件不同。您有一个行为主题,它将以前的值重播给新的订阅者,在这种情况下(直到您触发新的读取)才是之前的用户数据。您应该在用户登录时调用'cargarDatosIni'来获取新数据。 – jonrsharpe