1
ユーザーがログインしているかどうかを単に示すサービスがあります。 ユーザーを確認するためにhttp要求を行う別のサービスから更新されます。Angular 2の別のサービスでObservableを購読する方法
ナビゲーションバーコンポーネントは、観測可能な(BehaviorSubject)に基づいてユーザにログインまたはログアウトボタンを表示するためにuiを更新します。
のnav-main.component.ts
import {Auth} from '../services/auth.service';
constructor (public _auth: Auth) {
this._auth.check().subscribe(data =>{console.log(data)})
}
auth.service.ts
@Injectable()
export class Auth {
subject: Subject<boolean> = new BehaviorSubject<boolean>(null);
loggedIn:boolean = false;
constructor(){
this.subject.next(this.loggedIn);
}
login(id_token){
...
this.loggedIn = true;
this.subject.next(this.loggedIn);
}
check() {
return this.subject.asObservable().startWith(this.loggedIn);
}
}
login.service.ts(私のブートストラップ機能で私が認証を注入しています)
import {Injectable, Injector} from 'angular2/core';
import {Http,Headers} from 'angular2/http';
import {AppInjectorService} from './app-injector.service';
import {Auth} from './auth.service';
import {UserService} from './user.service'
import 'rxjs/Rx';
import {Observable} from 'rxjs/Observable';
@Injectable()
export class LogInUserService {
auth:Auth;
injector:Injector;
constructor(private http:Http) {
// let injector: Injector= AppInjectorService();
this.injector = Injector.resolveAndCreate([Auth]);
this.auth = this.injector.get(Auth);
}
logInUser(data) {
...
return this.http.post(this._authUrl, body, { headers:headers})
.map(function(res){ return <UserService> res.json().data;})
.do(data => this.logIn(data))
.catch(this.handleError);
}
//on success tell the auth.login the public key
logIn(data){
this.auth.login(data.publicKey);
}
私はあなたがisLoggedInを必要としないと思います。あなたはthis.logIn.next(false)できますか?なぜあなたはstartWith(this.isLoggedIn)を持っていますか?私はこれを理解していない。 – Mukus