【发布时间】:2018-06-20 04:33:25
【问题描述】:
我在 Angular 中的 BehaviorSubject 出现了一些意想不到的“行为”。当我的应用加载时,我会得到一堆对象(状态)并将它们设置为可观察对象:
public statuses$ = new BehaviorSubject<any>(null)
public getStatuses(): Promise<any> {
return this.http.get<any>(this.url, { headers: this.headers })
.toPromise()
.then(res => {
this.statuses$.next(res);
return res;
});
}
在我的组件中,我在 ngOnInit 期间订阅并将它分配给一个变量,以便我可以在我的模板中使用它:
ngOnInit() {
this.appointmentStatusesService.statuses$.subscribe(statuses => {
this.statuses = statuses;
});
}
足够简单。我正在做的事情的简短版本:我在带有 ngFor 的 HTML 模板中循环浏览这些状态。用户点击状态,它通过表单显示状态。 (这是用户点击状态时使用的函数):
public viewStatus(seqNo: number) {
const statuses = this.appointmentStatusesService.statuses$.getValue();
for (let x = 0; x < statuses.length; x++) {
if (statuses[x].seqno === seqNo) {
this.currentStatus = statuses[x];
break;
}
}
}
现在,我遇到的问题是对表单所做的任何更改也会更改 statuses$ 可观察的,即使我没有调用 .next()。这是我的表单的样子:
<input type="text" class="form-control" [(ngModel)]="currentStatus.name">
不知何故,当 currentStatus 的名称被改变时(当用户点击“VIEW STATUS”时,它也改变了 statuses$ observable。换句话说,对 currentStatus 对象所做的任何更改也会对状态进行$ observable。好像有某种双向绑定。我的印象是,为了将更改推送到 BehaviorSubject,您必须调用 .next() 方法。我可能误解了 BehaviorSubject 的工作原理,但是如果有人能告诉我哪里出错了,我将不胜感激:\谢谢!
【问题讨论】:
标签: angular rxjs behaviorsubject