[英]Observable subscribe method only getting called once
我正在構建一個簡單的角度應用程序,在該應用程序中我希望服務保持某種狀態。 我的第一次嘗試只是一個布爾值loginIn。 基本上,我希望導航欄組件訂閱此值,以便當其值為false時顯示“登錄”選項,而當其值為true時顯示“管理”按鈕。
我的服務:
@Injectable()
export class AuthService {
private _loggedIn = new BehaviorSubject(false);
public readonly loggedIn$ = this._loggedIn.asObservable();
constructor(private http: Http, private router: Router) {
this._loggedIn = new BehaviorSubject(false);
}
public login(u: User): Observable<any> {
let obs = this.http.post(ApiRoutes.login, u).map(res => res.json());
obs.subscribe(res => {
this._loggedIn.next(res.success);
if (this._loggedIn.getValue())
this.router.navigate(['/admin']);
});
return obs;
}
}
在我的導航組件中:
@Component({
selector: 'app-nav',
templateUrl: './nav.component.html',
styleUrls: ['./nav.component.scss'],
providers: [AuthService]
})
export class NavComponent implements OnInit {
loggedIn: boolean;
constructor(private as: AuthService) { }
ngOnInit() {
this.as.loggedIn$.subscribe(isLoggedIn => {
this.loggedIn = isLoggedIn;
console.log('from nav ' + isLoggedIn);
}, err => {
console.log(err);
}, () => {
console.log('complete');
});
}
}
現在,當應用啟動時,但在登錄返回后,我沒有看到控制台輸出。 為什么導航組件中的訂閱功能僅被調用一次(頁面確實導航到/ admin,所以我知道服務中的訂閱被調用了)? 這與熱/冷觀測物有關嗎? 我試過使用.publishLast()。refCount()之類的方法,但無濟於事。
您在NavComponent的提供程序中添加了AuthService。 因此,它具有自己的AuthService特定實例,與身份驗證組件所使用的實例不同。
該服務必須是單例,由應用程序中的所有組件共享。 因此,應該在根NgModule的提供程序中聲明它,而在其他地方沒有聲明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.