我有一个表单,可以从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页面将显示更新的用户输入。
答案 0 :(得分:0)
您的表单控件似乎已绑定到BehaviorSubject发出的UserModel对象的属性。因此,修改控件中的值将修改用户。并且由于您具有BehaviorSubject,因此下次订阅时,您将获得具有相同属性的完全相同的userModel对象。
如果您不希望表单修改存储在BehaviorSubject中的UserObject,那么请创建该对象的递归副本,并将该副本的属性绑定到表单中。