У меня есть служба TransactionEntityService, производная от EntityCollectionServiceBase для модели Transaction.
export class TransactionEntityService
extends EntityCollectionServiceBase<Transaction> {
Я использую TransactionDataService, чтобы переопределить поведение DefaultDataService по умолчанию. В AppModule TransactionDataService регистрируется так
export class AppModule {
constructor(
private eds: EntityDefinitionService,
private entityDataService: EntityDataService,
private transactionsDataService: TransactionsDataService
) {
eds.registerMetadataMap(entityMetadata);
entityDataService.registerService('Transaction', transactionsDataService);
}
}
и TransactionsDataService переопределяет getAll, как показано ниже.
export class TransactionsDataService extends DefaultDataService<Transaction> {
constructor(
http: HttpClient,
httpUrlGenerator: HttpUrlGenerator,
private notifyService: NotificationService
) {
super('Transaction', http, httpUrlGenerator);
}
getAll(): Observable<Transaction[]> {
return this.http
.get<ApiResponse>('https://localhost:xxxx/transaction/GetLastSixMonth')
.pipe(
tap((data) => {
this.notifyService.showSuccess(data.message, 'Sucess');
}),
map((res) => res.result),
catchError((err) => {
this.notifyService.showError(
'Error While Six Month Transactions',
'Error'
);
return of();
})
);
}
Свойство $ entityie службы сущности возвращает правильный результат после вызова api. и я фильтрую этот результат, чтобы получить подсчет чего-либо в наблюдаемом с именем last6MonthDepositCount $.
this.last6MonthDepositCount$ = this.transactionsEntityService.entities$.pipe(
map((transactions) => {
const res = transactions.filter(
(transaction) =>
transaction.transactionType === TransactionType.Deposit
).length;
return res;
})//,
// tap((val) => this.depositCount = val)
);
в html я могу использовать этот наблюдаемый
{{ last6MonthDepositCount$ | async }}
оно работает.
что мне делать, чтобы использовать значение этой наблюдаемой в другой переменной в моем коде?
this.last6MonthDepositCount$.subscribe(x => this.dipositCount = x);
такой код не работает. я получаю 0 в dipositCount, который выглядит как начальное значение наблюдаемого.