Angular Material 2:如何在向数据源添加数据后刷新md-table?

时间:2017-12-20 01:48:19

标签: angular material-design angular-material2

有人可以在加载表并更新表时,使用数据源添加数据的完整示例吗?

我的程序设法显示表,数据加载,要求新数据的对话框,要添加到数据库的数据,但我不知道如何刷新表

我找到了这个例子

    connect(): Observable<UserVModel[]> {
  return this._userService.dataChanged
      .switchMap(() => this._userService.getAllUsers()
}

在此链接中: Angular Material 2: How to refresh md-table after editing a record?

但我不知道如何实施它。

谢谢

3 个答案:

答案 0 :(得分:1)

有几种方法可以实现您的要求。这是我在项目中使用的:

这实现了数据源的抽象:

class DataSourceManager<T> {
    private readonly manualSource = new Subject<T>();

    constructor(private readonly source: Observable<T>) {

    }

    public getObserver(): Observable<T> {
        return merge(
            this.source,
            this.manualSource,
        );
    }

    public reload(): void {
        this.source.subscribe(x => {
            this.push(x);
        });
    }

    public push(value: T): void {
        this.manualSource.next(value);
    }
}

这是在MyItem上键入的数据集,通过MyItemService获取(这些数据集是琐碎的且超出范围):

class MyDataSource extends DataSource<MyItem> {

    public readonly manager: DataSourceManager<MyItem[]>;

    constructor(private readonly myService: MyItemService) {
        super();

        this.manager = new DataSourceManager<MyItem[]>(
            this.myService.getAllItemsObserver();
    }

    public connect(): Observable<MyItem[]> {
        return this.manager.getObserver();
    }

    public disconnect() {
    }
}

现在,当您需要手动更新数据源时,只需调用dataSource.manager.push

答案 1 :(得分:0)

您可以使用yourarray.push(您的新对象)将结果推送到数组。 (添加新记录后)

答案 2 :(得分:0)

我使用了一个空的(不纯的)管道并将其放入表ngFor循环中以获取此功能。