2016-08-01 6 views
0

Ich verwende beobachtbar und EventEmitter Sie den vollständigen Code sehen: http://plnkr.co/edit/HV2sWd?p=previewCanActivate Observable <boolean> funktioniert nicht oder EventEmitter.asObservable()? Angular2

Selbst mit publishReplay es funktioniert nicht :(

Ich vermute, dass der EventEmitter.asObservable()

Was ich vermisse

auth-service.ts:

@Injectable() 
export class AuthService { 
    private _isLoggedIn: boolean = false; 
    private _isLoggedInEvent: EventEmitter<boolean>; 
    private _isLoggedInObservable: Observable<boolean>; 

    constructor(){ 
    this._isLoggedInEvent = new EventEmitter<boolean>(); 
    this._isLoggedInObservable = this._isLoggedInEvent.asObservable().publishReplay(1); 
    this._isLoggedInEvent.emit(false); 
    } 

    login() { 
    return Observable.of(true).delay(1000).do(val =>{ 
     this.isLoggedIn = true; 
     this.isLoggedInEvent.emit(true); 
    }); 
    } 

    logout() { 
    this.isLoggedIn = false; 
    } 

    isLoggedInObservable() : Observable<boolean> { 
    return this._isLoggedInObservable; 
    } 
} 
+0

Ihr Plunker Code scheint genug, um nicht arbeiten, um den Code zu testen, die Sie gebucht haben. – StriplingWarrior

Antwort

0

Schließlich habe ich BehaviorSubject anstelle von Ereignis-Emitter und arbeitet Hier ist die Lösung http://plnkr.co/edit/HgwGh8?p=preview

@Injectable() 
export class AuthService { 
    private _isLoggedIn: boolean = false; 
    private _isLoggedInEvent: BehaviorSubject<boolean>; 
    private _isLoggedInObservable: Observable<boolean>; 

    constructor(){ 
    this._isLoggedInEvent = new BehaviorSubject<boolean>(false); 
    this._isLoggedInObservable = this._isLoggedInEvent.asObservable(); 
    //this._isLoggedInEvent.next(false); 
    } 

    login() { 
    return Observable.of(true).delay(1000).do(val =>{ 
     this.isLoggedIn = true; 
     this.isLoggedInEvent.next(true); 
    }); 
    } 

    logout() { 
    this.isLoggedIn = false; 
    } 

    isLoggedInObservable() : Observable<boolean> { 
    return this._isLoggedInObservable; 
    } 
} 
+0

'EventEmitter' sollte sowieso nicht für irgendwas als' @Output() 's in Komponenten und Direktiven verwendet werden. –

Verwandte Themen