这个 PrimeNG 数据 table 可以直接采用 Observable(发射对象数组)而不是标准对象数组吗?

Can this PrimeNG data table take directly an Observable (emitting array of objects) instead the standard array of objects?

我正在使用 PrimeNG 开发 Angular 应用程序。特别是我使用的是 PrimeNG DataTable,这个组件:https://primefaces.org/primeng/showcase/#/table

我按照之前官方文档的方式使用没问题。基本上我可以从 Firebase FireStore 数据库中检索对象列表,然后以建议的方式将此对象列表用于数据 table HTML 定义,如下所示:

<p-table [value]="MY-RETRIEVED-OBJECT-LIST">
    <ng-template pTemplate="header">
        <tr>
            <th *ngFor="let col of cols">
                {{col.header}}
            </th>
        </tr>
    </ng-template>
    <ng-template pTemplate="body" let-car>
        <tr>
            <td *ngFor="let col of cols">
                    {{car[col.field]}}
            </td>
        </tr>
    </ng-template>
</p-table>

我想问是否有可能(以及如何)使用更具反应性的方法。

我试着用一个例子来解释。在我的组件 TypeScript 代码中,我没有对象列表,但我有这个 Observable:

employeesList$:Observable<Employee[]>;

进入我的组件的 ngOnInit()

ngOnInit() {

    this.loadEmployeesList();
    ................................
    ................................
    ................................

}

这个 loadEmployeesList() 是一个组件方法,它简单地调用服务 class 以获取先前的 employeesList$:Observable 对象:

async loadEmployeesList() {
    this.employeesList$ = await this.employeeService.getAllEmployees();
}

所以基本上我不是通过这种方式订阅 Observable 来检索必须传递给我的 PrimeNG 数据 table 定义的对象的显式列表,但我有一个 Observable 发出一个 Employee 对象的数组(通常 Observable 可以以反应式的方式直接用于视图以获取数据),像这样:

<div class="col-4" *ngFor="let wine of myObservable$ | async;">
    .............................................................
    .............................................................
    .............................................................
</div>

但在这种情况下,我的 PrimeNG p-table 元素似乎只接受一个 classic 数组而不是一个 Observable。

我能以某种方式将我的 Observable 传递给我的 p-table 元素吗?或者我可以获得必须直接传递到我的 HTML 代码中的对象数组吗?或者获取将由我的数据呈现的对象数组 table 将 Observable 订阅到 TypeScript 代码中是否更整洁?

你试过吗?

<p-table [value]="employeesList$ | async">

在这种情况下不要忘记严格的空值检查!

<p-table [value]="(employeesList$ | async)!" ...>

https://angular.io/guide/template-typecheck#strict-null-checks