首页 > 解决方案 > MatTableDataSource - 当新记录添加到服务器时如何刷新表

问题描述

我的数据提取工作完美,但在添加新记录后无法重新加载工作。据我所知,每当对行为主体调用下一个方法时,所有观察者都会收到通知,并且数据重新加载会自动发生。但不是那样发生的。

组件.ts

dataSource = new MatTableDataSource<IWorkOrders>();
  ngOnInit() {
    this.bs.wobSubject$.subscribe((data:IWorkOrders[]) => {
      this.dataSource.data = data;
    })

这是发布新记录的代码

this.bs.postWorkOrder(this.saleForm.value);

服务.ts

      public wobSubject$ = new BehaviorSubject<IWorkOrders[]>([]);
    constructor(private http: HttpClient) {
     this.getWorkOrder(); 
    }
      getWorkOrder() {
        this.http.get(this.BASE_URL + '/getworkorders/')
        .subscribe((data:IWorkOrders[]) => {
          this.wobSubject$.next(data);
        });
      }
  postWorkOrder(workOrder: IWorkOrders) {
    this.http.post<IWorkOrders>(this.BASE_URL + '/addworkorder/', workOrder)
    .subscribe((data: any) => {
      this.wobSubject$.next(data);
    });
  }

标签: angularangular-materialrxjs6

解决方案


this.bs.wobSubject$.subscribe((data:IWorkOrders[]) => {
  this.dataSource.data = data;
})

Angular 提供了数据源的抽象,你不应该摆弄它。

尝试改用它。

this.bs.wobSubject$.subscribe((data:IWorkOrders[]) => {
  this.dataSource = new MatTableDataSource(data);
})

推荐阅读