В начале я хочу сказать, что знаю, что есть много вопросов по этому поводу, но ни у одного из них не было той проблемы, с которой я столкнулся.Я много чего перепробовал с картой и прочим, но на самом деле не знаю, какой путь правильный.
Прежде всего, я хочу использовать его для возможности редактирования пользовательского профиля.Поля ввода должны быть загружены с текущими значениями профиля.То, что я хочу сделать через валидаторы, чтобы не было ошибок валидации.
Поэтому в constructor()
моего profile.component.ts
я вызываю этот метод:
readProfileData() {
this.userService.getProfile()
.pipe(first())
.subscribe(
userData => {
this.firstname = userData.firstName;
this.lastname = userData.lastName;
this.username = userData.username;
this.email = userData.email;
this.dateOfBirth = userData.dateOfBirth;
this.country = userData.location;
this.profileImage = userData.profileImage;
this.gender = userData.gender;
this.lastUpdated = userData.lastUpdated;
this.activated = userData.activated;
this.userId = userData.userId;
this.userService.profileImageUpdate$.next(this.profileImage);
});
}
МетодgetProfile()
get call:
getProfile() {
return this.http.get<any>(this.GET_PROFILE_API);
}
В моем методе ngOnInit()
я вызываю сборку формы:
public buildForm() {
this.editForm = this.form.group({
username: [this.username, [Validators.required, Validators.minLength(this.minLength), CustomValidators.validateCharacters], AlreadyTakenValidator.checkUsername(this.registrationService)],
email: [this.email, [Validators.required, Validators.email, CustomValidators.validateCharacters], AlreadyTakenValidator.checkEmail(this.registrationService)],
oldPassword: ['', [Validators.required]],
newPassword: ['', [Validators.required]],
newPasswordConf: ['', [Validators.required]],
firstname: [this.firstname, [Validators.required, NoWhitespaceValidator()]],
lastname: [this.lastname, [Validators.required, NoWhitespaceValidator()]],
country: ['', [Validators.required]],
dateOfBirth: ['', [Validators.required]],
gender: ['', [Validators.required]],
}
, {
validator: MustMatch('newPassword', 'newPasswordConf')
})
}
Итак, как вы можете себе представить, проблема в том, что никакие значения неотображается в полях ввода, потому что они не определены.Если я пишу свои собственные значения непосредственно в поле перед валидатором, это работает.Так что это проблема подписки.Мне действительно нужны переменные для заполнения.
Я прочитал очень много вещей с map to res.json или что-то с toPromise, но ничего, что мне помогло.Я понимаю проблему, что она асинхронная и еще не загружена, но я не знаю, как предотвратить это, не позволяя пользователю застрять в процессе загрузки.