У меня есть компонент профиля пользователя, который пытается подписаться на тему поведения в моей службе пользователя. Я установил начальное значение поведения с нулевым значением. Когда пользователь регистрируется, я также передаю значения своему пользовательскому объекту в моем компоненте регистрации, а затем передаю те же значения в метод, который сохраняет их в моей следующей теме.
Хотя, когда я подписываюсь в моем ngOnIt на свой компонент профиля пользователя, я получаю только первоначальное значение. Я что-то здесь упускаю? Из того, что я прочитал, я проверил, чтобы убедиться, что я не предоставляю несколько экземпляров моего User Service, и я использовал value, getValue и подписку, чтобы получить значение. Все возвращается ноль.
export class UserProfileComponent implements OnInit {
user: User;
ngOnInit() {
// My problem.
this.user = this.userService.getSavedUser().getValue();
console.log(this.user);
}
}
// object
export class User {
firstName: string;
lastName: string;
email: string;
mobile: string;
uid: string;
termsOfAgreement: boolean;
constructor(
email: string,
mobile: string,
firstName: string,
lastName: string,
uid: string,
termsOfAgreement: boolean
) {
this.email = email;
this.mobile = mobile;
this.firstName = firstName;
this.lastName = lastName;
this.uid = uid;
this.termsOfAgreement = false;
}
}
signup.component.ts
onSignup(signupFormData) {
return this.afAuth.auth.createUserWithEmailAndPassword(signupFormData.value.email, signupFormData.value.password)
.then(userInfo => {
// Pass in user info into to user object.
const user: User = new User(signupFormData.value.email,
signupFormData.value.mobile, signupFormData.value.firstName,
signupFormData.value.lastName,
userInfo.user.uid, false);
this.writeNewUser(user);
}).catch((error) => {
this.showError = true;
this.errorMessage = error.message;
})
}
private writeNewUser(user: User): void {
this.userService.addUser(user);
}
// user.service.ts
export class UserService {
private subject: BehaviorSubject<User> = new BehaviorSubject(null);
public addUser(user: User): void {
this.db
.collection("users")
.doc(user.uid)
.set(Object.assign({}, user));
this.saveUser(user);
}
public saveUser(user: User) {
this.subject.next(user);
}
public getSavedUser(): BehaviorSubject<User> {
return this.subject;
}
}