Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 有没有一种方法可以在不重新呈现表的情况下更新mat表数据源?_Angular_Typescript_Angular Material_Mat Table - Fatal编程技术网

Angular 有没有一种方法可以在不重新呈现表的情况下更新mat表数据源?

Angular 有没有一种方法可以在不重新呈现表的情况下更新mat表数据源?,angular,typescript,angular-material,mat-table,Angular,Typescript,Angular Material,Mat Table,我有一个带有可扩展行的mat表,当数据源更新时,所有打开的行都会自动关闭,页面也会丢失滚动位置。如何在不影响当前状态的情况下更新表数据 示例代码: 我只是在试验mat table api和数据源接口,所以我可能遗漏了一些东西,但您描述的一个选项是避免每次mat table内部调用connect方法时创建新的可观察对象。相反,只要有新数据可用,就返回BehaviorSubject并调用next 根据stackblitz示例,只需通过返回BehaviorSubject并添加新方法来修改Example

我有一个带有可扩展行的mat表,当数据源更新时,所有打开的行都会自动关闭,页面也会丢失滚动位置。如何在不影响当前状态的情况下更新表数据

示例代码:

我只是在试验mat table api和数据源接口,所以我可能遗漏了一些东西,但您描述的一个选项是避免每次mat table内部调用connect方法时创建新的可观察对象。相反,只要有新数据可用,就返回BehaviorSubject并调用next

根据stackblitz示例,只需通过返回BehaviorSubject并添加新方法来修改ExampleDataSource,以便在表中有新数据时使用:

export class ExampleDataSource extends DataSource<any> {

  private _data$: BehaviorSubject<any[]> = new BehaviorSubject([]);
  data$ = this._data$.asObservable();

  update(data) {
    const rows = [];
    data.forEach(element => rows.push(element, { detailRow: true, element }));
    this._data$.next(rows);
  }
  /** Connect function called by the table to retrieve one stream containing the data to render. */
  connect(): Observable<Element[]> {
    return this.data$;
  }

  disconnect() { }
}
并且,我在超时时以相反顺序触发数据更新以进行验证