Столбец данных Clarity Datagrid & Promise / Subject - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть сетка данных, с одним столбцом, конкретно связанным с вызовом функции.

  <clr-dg-column [clrDgField]="'Id'">ID</clr-dg-column>
  <clr-dg-column [clrDgField]="'Client'">Client</clr-dg-column>
  <clr-dg-column [clrDgField]="'Name'" [clrDgSortOrder]="ClrDatagridSortOrder.ASC">Name</clr-dg-column>
  <clr-dg-column [clrDgField]="'PublicKeyHash'">Public Key Hash</clr-dg-column>

  <clr-dg-row *clrDgItems="let clientLicense of ClientLicenses" [clrDgItem]="clientLicense">
    <clr-dg-cell>{{clientLicense.Id}}</clr-dg-cell>
    <clr-dg-cell>
      {{getClientName(clientLicense.ClientId)}}
    </clr-dg-cell>
    <clr-dg-cell>{{clientLicense.Name}}</clr-dg-cell>
    <clr-dg-cell>{{clientLicense.PublicKeyHash}}</clr-dg-cell>
  </clr-dg-row>

См. Второй столбец, где мы вызываем "getClientName (clientLicense.ClientId)". Этот метод должен работать асинхронно; то есть по запросу он не будет сразу иметь значение. Я немного новее в Typescript / Angular, но я считаю, что я хочу вернуть либо Promise, либо BehaviorSubject (до сих пор я использовал их довольно широко, когда извлекал записи из моих репозиториев с помощью вызова метода, а не привязка / подписка).

Итак, я попытался вернуть Promise, BehaviorSubject, AsyncSubject - все с одинаковым результатом - весь веб-браузер сильно блокируется, и мне нужно завершить процесс (смеется).

Я понимаю, что привязка к свойству или предварительное заполнение свойства в моей модели представления будет проще всего; однако из-за архитектуры это не легко ... у меня по сути есть два отдельных репозитория, которые связаны через. внешний ключ; Я извлекаю имя клиента из репозитория клиента на основе идентификатора клиента в лицензии.

Ниже приведены несколько вариантов "getClientName (...)", которые я пытался выполнить. Я пробовал варианты звонков в шаблоне HTML (например, asyn c на обещании и т. Д. c.). Есть идеи?

ПоведениеSubjuct

  public getClientName(id: string): BehaviorSubject<string> {
    var result: BehaviorSubject<string> = new BehaviorSubject("");

    this.clientRepo.getById(id).then(x => result.next(x.Name))

    return result;
  }

Обещание

  public async getClientName(id: string): Promise<string> {
    var client: Client;

    client = await this.clientRepo.getById(id).then()

    var result: string = "";

    if (client) {
      result = client.Name;
    }

    return result;
  }

1 Ответ

1 голос
/ 08 февраля 2020

Работает ли встроенная Angular асин c труба ?

 <clr-dg-cell>{{getClientName(clientLicense.ClientId) | async}}</clr-dg-cell>
...