代码之家  ›  专栏  ›  技术社区  ›  naoru

可观测的priming-turbo表单细胞操作

  •  1
  • naoru  · 技术社区  · 7 年前

    文档中的一个字段称为 providerName 在那里,我保存的不是实际的提供者名称,而是提供者firebase id(嵌套对象)。这样,无论何时实际的提供者对象发生更改(编辑操作),我都会在原始文档中拥有正确的名称

    目前,我的priming p-table正在显示提供者id,因此我编写了以下代码来处理它

    下面是template.html代码

    <p-table #dt [columns]="cols" [value]="expenseService.expenses$ | async" dataKey="id">
            <ng-template pTemplate="body" let-expense>
              <tr [pSelectableRow]="expense">
                <td *ngFor="let col of cols" [ngSwitch]="col.field">
                  <span *ngSwitchCase="'serviceProviderName'">{{getName(expense)}}</span> <--- this is the important line
                  <span *ngSwitchCase="'amount'">{{expense.amount | number:'1.0-0'}}</span>
                  <span *ngSwitchDefault>{{ expense[col.field] }}</span>
    
                </td>
              </tr>
            </ng-template>
          </p-table>
    

    在我的组件中,我有以下getName()的实现

      getName(event) {
        const label = this.serviceProviders.filter(x => x.value === event.serviceProviderName);
        if (label && label[0]) {
          return label[0].label;
        } else {
          return event.serviceProviderName;
        }
      }
    

    这个 serviceProviders 当表被一个可观察对象填充时,它是空的,所以我的问题来了。

    如何让datatable知道 服务提供者 准备好了,然后打电话给 getName 功能?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Suresh Kumar Ariya    7 年前

    而不是从HTML模板调用该方法,该模板执行异步/firbase调用。您可以使用.map/for循环在组件中执行相同的逻辑。最终结果可以分配给HTML。

        2
  •  0
  •   Jonathan    5 年前

    作为 要在不可见项上声明的关键字:

    <div *ngIf="test | async as t">
      <p-table [value]="t" [resizableColumns]="true" [autoLayout]="true">
      ...
      </p-table>
    </div>
    
    推荐文章