从 DataSource Angular MatTable 获取对象

Get object from DataSource Angular MatTable

我有一个 material 数据 table 并从查询中获取数据以显示它。这是我的交易-history.component.ts 文件:

import { Component, OnInit } from '@angular/core';
import { Transaction } from '../models/transaction';
import { TransactionService } from '../services/transaction.service';
import { DataSource } from '@angular/cdk/table';
import { Observable } from 'rxjs';

@Component({
  selector: 'app-transaction-history',
  templateUrl: './transaction-history.component.html',
  styleUrls: ['./transaction-history.component.css']
})
export class TransactionHistoryComponent implements OnInit {

  dataSource = new TransactionDataSource(this.transactionService);

  displayedColumns = ['id', 'cust', 'mgrName', 'dept', 'timestamp'];

  constructor(public transactionService: TransactionService) { }

  ngOnInit() {
  }
}

export class TransactionDataSource extends DataSource<any>{
  constructor(private transactionService: TransactionService) {
    super();
  }
  connect(): Observable<Transaction[]> {
    return this.transactionService.getUploaded();
  }
  disconnect() { }
}

这完美地显示了数据。但现在我想获取显示在每一行中的事务对象。现在 dataSource 正在获取一个 Transactions 列表,但我如何才能访问该列表?我还没有在 dataSource 对象上找到任何可以执行此操作的方法。

提前致谢。

您始终可以保存最新数据的副本并通过 public 属性 公开它。像这样:

export class TransactionDataSource extends DataSource<any>{
  public data: Transaction[];
  constructor(private transactionService: TransactionService) {
    super();
  }
  connect(): Observable<Transaction[]> {
    return this.transactionService.getUploaded().pipe(
      tap((data) => this.data = data),
    );
  }
  disconnect() { }
}

这样做的一个缺点是对数据 属性 的修改不会反映在 table 中。