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

And*_*ili 4 primeng angular primeng-datatable angular-observable

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

我按照之前官方文档所示的方式使用没有问题。基本上,我可以从 Firebase FireStore 数据库检索对象列表,然后以建议的方式将此对象列表使用到数据表 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>
Run Code Online (Sandbox Code Playgroud)

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

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

employeesList$:Observable<Employee[]>;
Run Code Online (Sandbox Code Playgroud)

在我的组件的ngOnInit()中,我有:

ngOnInit() {

    this.loadEmployeesList();
    ................................
    ................................
    ................................
Run Code Online (Sandbox Code Playgroud)

}

这个loadEmployeesList()是一个组件方法,它只需调用一个服务类即可获取之前的EmployeesList$:Observable<Employee[]>对象:

async loadEmployeesList() {
    this.employeesList$ = await this.employeeService.getAllEmployees();
}
Run Code Online (Sandbox Code Playgroud)

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

<div class="col-4" *ngFor="let wine of myObservable$ | async;">
    .............................................................
    .............................................................
    .............................................................
</div>
Run Code Online (Sandbox Code Playgroud)

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

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

Ben*_*cot 8

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

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

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


Abd*_*hif 6

你试过这个吗?

<p-table [value]="employeesList$ | async">
Run Code Online (Sandbox Code Playgroud)