为什么在不提交表单的情况下编辑表单的[[NgModel)]输入时,BehaviorSubject会发生变化?

时间:2019-03-25 17:30:37

标签: angular rxjs

我有一个表单,可以从BehaviorSubject加载用户信息。如果我编辑此表单上的任何输入并浏览页面而没有单击提交,则无论该主题如何,用户信息都会更新。

当我没有在BehaviorSubject上调用next()时,我不知道为什么要更新主题。

===主题类===

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 :(得分:0)

您的表单控件似乎已绑定到BehaviorSubject发出的UserModel对象的属性。因此,修改控件中的值将修改用户。并且由于您具有BehaviorSubject,因此下次订阅时,您将获得具有相同属性的完全相同的userModel对象。

如果您不希望表单修改存储在BehaviorSubject中的UserObject,那么请创建该对象的递归副本,并将该副本的属性绑定到表单中。