我在服务中定义并初始化了一个 BehaviourSubject 类型的数组,并在使用另一个函数对其进行编辑时对其进行更新。但是,UI 上显示的结果不是新编辑的数组,而是已成功将更改应用到服务器上的外部数据库。
我已经尝试了许多在线解决方案,但仍然无法正常工作。
这是名为“ServicesService”的服务中数组初始化的代码。
private _nationalProps: BehaviorSubject<NationalProp[]> = new BehaviorSubject<NationalProp[]>([]);
这是服务中将数组作为可观察对象访问的函数;
get national() {
return this._nationalProps.pipe(take(1), map(nprops => {
return [...nprops];
})
);
}
这是服务中用于删除数组中的一个元素的函数。首先,它在服务器上删除它而不是在本地阵列上。
deleteNationalProp(id: string) {
return this.http.delete(this.serverUrl + `/national_props/${id}.json`)
.pipe(
switchMap(() => {
return this._nationalProps;
}),
take(1),
tap(props => {
this._nationalProps.next(props.filter(b => b.id !== id));
}));
}
这是我订阅 BehaviourSubject 以跟踪任何更改的另一个组件中的代码;
propSub: Subscription; // imported from rxjs
loadedProps: NationalProp[];
ngOnInit() {
this.propSub = this.servicesSrv.national.subscribe(props => {
this.loadedProps = props;
});
我在服务中调用 delete 方法来使用这个函数删除一个元素;
this.servicesSrv.deleteNationalProp(pId).subscribe();
我所期望的是,一旦我从数组中删除了一个元素,它也应该从 UI 的列表中删除,而无需刷新页面或重新访问页面,但这似乎不起作用。
我将感谢您对如何解决此问题的帮助。