2017-09-12 9 views
0

BehaviorSubject에서 다음 (..)을 설정할 때 런타임 오류가 발생합니다 (firebase.User | null 형BehaviorSubject 다음으로 정의되지 않았습니다.

subscribe.js:165 TypeError: Cannot read property 'next' of undefined 

다음은 문제를 일으키는 코드입니다.

export class AppAuthService { 

    private currentUserSubject = new BehaviorSubject<firebase.User |null>(null); 
    public currentUser = this.currentUserSubject.asObservable().distinctUntilChanged(); 

    private isAuthenticatedSubject = new ReplaySubject<boolean>(1); 
    public isAuthenticated = this.isAuthenticatedSubject.asObservable(); 

    constructor(public afAuth: AngularFireAuth) { 
     afAuth.auth.onAuthStateChanged(this.onAuthStateChanged); 
    } 

    onAuthStateChanged(user: firebase.User): void { 
     if (user) { 
     this.currentUserSubject.next(user); <------err 
     this.isAuthenticatedSubject.next(true); 
     console.log('loggedIN!'); 
     } else { 
     this.currentUserSubject.next(null); <-------err 
     this.isAuthenticatedSubject.next(false); 
     console.log('GONE!'); 
     } 
    } 

} 

this.currentUserSubject.next(..)이 사용자 obj 또는 null로 설정되면 언제든지 오류가 표시됩니다. currentUserSubject이 널 (null)과 널의 다음 잘못인가?로 초기화되기 때문에 나는

private currentUserSubject = new BehaviorSubject<firebase.User |null>(null); 

나는 그것 때문에 인터페이스가 아닌 객체 new firebase.User()로 초기화 할 수 없습니다입니다 ... 그 의심.

또한 currentUserSubject를 제목으로 선언하면 동일한 오류가 발생합니다.

private currentUserSubject = new Subject(); 

주체/ReplaySubject에 firebase.User 인터페이스를 변환하는 가장 좋은 방법은 무엇입니까? 사용자가 프로파일 구성 요소를 변경할 때 firebase 서버에서 동적 업데이트가되도록이 작업을 수행하려고합니다.

감사합니다.

+0

귀하의 오류가 이해가되지 않습니다. 나는 여기에서 그것을 시도하고 작동한다 : https://plnkr.co/edit/etWUx93vtQkfp0mkhbnU?p=preview 당신은'set currentUserSubject (v) {'어딘가에 메소드가 없습니까? – acdcjunior

답변

1

를 사용하여 지방 화살표 기능 :

constructor(public afAuth: AngularFireAuth) { 
    afAuth.auth.onAuthStateChanged(user => this.onAuthStateChanged(user)); 
} 
+0

Wunderbar! 그게 효과가! – Davvit

관련 문제