У меня есть сетка данных, с одним столбцом, конкретно связанным с вызовом функции.
<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;
}