#angular #rxjs
#angular #rxjs
Вопрос:
У меня есть форма, которая загружает информацию о пользователе из BehaviorSubject. Если я редактирую какие-либо входные данные в этой форме и перехожу со страницы, НЕ нажимая кнопку отправить, информация о пользователе обновляется в теме независимо.
Я не понимаю, почему тема обновляется, когда я не вызвал next () для BehaviorSubject.
=== КЛАСС ОБЪЕКТА ===
userDataReceiver$: Observable<UserModel>;
private userDataObserver = new BehaviorSubject(null);
constructor() {
this.userDataReceiver$ = this.userDataObserver.asObservable();
}
sendUserDataToSubscriber(data: UserModel) {
this.userDataObserver.next(data);
}
===ПОЛЬЗОВАТЕЛЬСКИЙ КЛАСС ===
userDataReceiver: Subscription;
ngOnInit() {
this.userDataReceiver = this.observerService.userDataReceiver$
.subscribe(res => this.user = res);
}
ngOnDestroy() {
this.userDataReceiver.unsubscribe();
}
this.user используется в форме на html-странице для загрузки / сохранения пользовательских данных. Если входные данные редактируются на html-странице без сохранения формы, переход от страницы все равно приведет к обновлению пользовательского объекта. При переходе обратно на html-страницу отобразится обновленный пользовательский ввод.
Ответ №1:
Похоже, что ваши элементы управления формой привязаны к свойствам объекта UserModel, создаваемого BehaviorSubject. Таким образом, изменение значения в элементе управления изменит пользователя. И поскольку у вас есть BehaviorSubject, при следующей подписке вы получите точно такой же объект UserModel с его измененными свойствами.
Если вы не хотите, чтобы форма изменяла пользовательский объект, хранящийся в BehaviorSubject, затем создайте рекурсивную копию объекта и привяжите свойства этой копии к форме.