Я создаю приложение для входа в Angular с использованием firebase и пытаюсь подписаться на пользователя Observable в моем компоненте следующим образом:
export class UserEditComponent implements OnInit {
constructor(public authService: AuthService) {}
ngOnInit() {
this.authService.user.subscribe(user => {
console.log(user);
});
}
}
Вот наблюдаемое, как определено в AuthService:
export class AuthService {
public user: Observable<firebase.User>;
constructor(public auth: AngularFireAuth) {
this.user = auth.authState;
}
}
Это прекрасно работает в моем HTML-шаблоне, где следующий список корректно обновляется каждый раз, когда обновляются данные пользователя:
<ul>
<li><strong>name:</strong> {{ (authService.user | async)?.displayName }}</li>
<li><strong>email:</strong> {{ (authService.user | async)?.email }}</li>
<li><strong>phone:</strong> {{ (authService.user | async)?.phone }}</li>
</ul>
Моя проблема заключается в том, что моя функция подписки запускается только один раз,Пользовательский объект регистрируется в консоли только при запуске.Я пытался переместить код из ngOnInit
в конструктор, но результат тот же.Разве я не должен получать новый пользовательский объект, регистрируемый на консоли каждый раз, когда пользователь обновляется?
Я внимательно посмотрел на проблему AngularFire Observables / Subscribe - не задается переменная класса в той же области , но я не могу понять, как это применимо к моему коду, так как я делаю подписку в компоненте, а не в сервисе.
* ОБНОВЛЕНИЕ *
Теперь я 'Мне интересно, если это какая-то ошибка, или, возможно, проблема с версиями.Я заменил код AuthService
следующим:
export class AuthService {
public user: Observable<any>;
constructor(public auth: AngularFireAuth) {
this.user = Observable.create(function (observer) {
setInterval(() => observer.next(new Date().toString()), 1000 );
});
}
}
Это прекрасно работает, что наводит меня на мысль, что проблема как-то связана с конкретной наблюдаемой, предоставляемой firebase.Не уверен, что с этим делать.Все, что я могу придумать, является хакерским.
* ОБНОВЛЕНИЕ 2 *
Кажется, что происходит то, что базовое пользовательское значение обновляется, хотя next
функция не вызывается.Я не уверен, почему это так.Я изменил свой ngOnInit
на что-то вроде этого:
export class UserEditComponent implements OnInit {
public userCurrent: firebase.User;
constructor(public authService: AuthService) {}
ngOnInit() {
obj = this;
this.authService.user.pipe(first()).subscribe(user => {
obj.userCurrent = user;
});
}
}
Значение объекта userCurrent
остается обновленным.Я понятия не имею, что происходит, но это работает для того, что мне нужно.