Angular 6 refresh Observable,删除后从后端获取所有条目

Angular 6 refresh Observable,删除后从后端获取所有条目,angular,typescript,observable,Angular,Typescript,Observable,我有一个从后端获取所有数据的Observable。当我对某个项目执行删除操作时,我希望刷新此可观察项。 我尝试了两种有效的解决方案,但似乎它们真的很难看。 一个是强制angular重新加载当前路线,另一个是如下面的代码所示,以给定的间隔重新订阅可观测的路线 组件1.ts: data: Observable<Setting[]>; ngOnInit() { this.data = interval(1000).pipe( startWith(0), mergeMa

我有一个从后端获取所有数据的Observable。当我对某个项目执行删除操作时,我希望刷新此可观察项。
我尝试了两种有效的解决方案,但似乎它们真的很难看。 一个是强制angular重新加载当前路线,另一个是如下面的代码所示,以给定的间隔重新订阅可观测的路线

组件1.ts:

data: Observable<Setting[]>;

ngOnInit() {
  this.data = interval(1000).pipe(
    startWith(0),
    mergeMap(res => this.dataService.fetchData())
  );
}
deleteSetting() {
  this.settingsService.deleteSetting(this.keyNameToDelete);
  this.update.next(true);
}
apiService:

delete(keyName: string): Observable<any> {
  let params = new HttpParams();
  params = params.append('keyName', keyName);

  return this.httpClient.delete<Setting>(this.API_URL + '/settings/delete', {params})
  .pipe(
    catchError(this.handleError('delete', []))
  );
}
使用行为主体

BehaviorSubject具有存储 “当前”值。这意味着你总是可以直接得到最后一个 从BehaviorSubject发出的值

删除时,将Behavior Subject值设置为true,然后在ngOnInit中订阅该值

update=new BehaviorSubject<boolean>(false);

ngOnInit() {
  this.fetchData();
  this.update.subscribe(update=>update === true ? this.fetchData() : '');
}

fetchData(){
      this.data = this.dataService.fetchData();
}

是否要在删除数据后立即发出get请求?或者您想在不接触网络的情况下本地更新数据?通常情况下,删除请求会将更新后的数据发送回您。我认为您无法刷新可观察数据。使用HttpClient时,可观察对象在获取数据后完成。但在删除该项时,可以直接运行“this.dataService.fetchData()”。您还可以创建一个主题,当删除完成时将触发该主题,并订阅该主题以获取数据deleted@VinodBhavnani所以如果我调用delete(object),它将实例化一个新的GET请求以获取更改的上下文?我想您的回答会引导我找到一个好的解决方案,但是现在对后端的delete调用不会删除更多内容。但它调用fetchData并重新加载视图。为什么会发生这种情况?了解dataService.fetchData()中使用的subject$可能很重要。它已经是一个行为subject。您可以共享您的删除方法吗?添加了上述服务中的方法,效果非常好,只是为了澄清一下,您能否解释一下ngOnInit中的这行代码:this.update.subscribe(update=>update==true?this.fetchData() : '');基本上我用的是if-else的速记。最初将updatebehavior subject值设置为false,此时我们无需调用this.fetchData()
delete(keyName: string): Observable<any> {
  let params = new HttpParams();
  params = params.append('keyName', keyName);

  return this.httpClient.delete<Setting>(this.API_URL + '/settings/delete', {params})
  .pipe(
    catchError(this.handleError('delete', []))
  );
}
deleteSetting() {
  this.settingsService.deleteSetting(this.keyNameToDelete);
  this.update.next(true);
}
update=new BehaviorSubject<boolean>(false);

ngOnInit() {
  this.fetchData();
  this.update.subscribe(update=>update === true ? this.fetchData() : '');
}

fetchData(){
      this.data = this.dataService.fetchData();
}
deleteSetting(keyName: string) {
  const x = this.apiService.delete(keyName);
  x.subscribe(()=>this.update.next(true););
}