2016-08-01 54 views
0

我使用的是可觀察和EventEmitter你可以看到完整的代碼:http://plnkr.co/edit/HV2sWd?p=previewCanActivate Observable <boolean>不工作或EventEmitter.asObservable()? Angular2

即使使用publishReplay它不工作:(

我懷疑EventEmitter.asObservable()

什麼我失去了

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

你plunker代碼似乎沒有足夠的工作來測試你已經發布的代碼。 – StriplingWarrior

回答

0

最後,我用BehaviorSubject在事件發射器代替和作品 下面是解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'不應該被用在組件和指令中的@Output()之外。 –