我有一個服務注入組件(我的數據存儲),從其他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