Почему BehaviorSubject изменяется при редактировании [(NgModel)] входных данных формы без отправки формы? - PullRequest
0 голосов
/ 25 марта 2019

У меня есть форма, которая загружает информацию пользователя из 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 Ответ

0 голосов
/ 25 марта 2019

Кажется, что элементы управления вашей формы связаны со свойствами объекта UserModel, испускаемого объектом BehaviorSubject. Таким образом, изменение значения в элементе управления изменит пользователя. И поскольку у вас есть BehaviorSubject, при следующей подписке вы получите точно такой же объект userModel с его измененными свойствами.

Если вы не хотите, чтобы форма изменяла UserObject, хранящийся в BehaviorSubject, создайте рекурсивную копию объекта и свяжите свойства этой копии в форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...