Как показали другие ответы, вам нужно разделить текст. Я предпочел бы создать интерфейс, который моделирует различные части текста дохода.
export interface Income {
amount: string;
currencySymbol: string;
text: string;
}
В вашем компоненте или услуге (где бы это ни имело смысл, когда дело касается повторного использования интерфейса), вы должны отобразить текст к интерфейсу. В этом и заключается сложность. Я покажу версию использования его в компоненте для простоты. На самом деле вы могли бы сделать это в своем сервисе для повторного использования.
incomes: Income[];
ngOnInit() {
this.service.getIncomeTexts().subscribe((texts: string[]) => {
this.incomes = texts.map(x => this.mapTextToIncome(x));
});
}
private mapTextToIncome(text: string): Income {
// this regex will match a string that ends with a dollar symbol
// followed by numbers or commas
// You could extend the possible currency symbols if required
const parts: string[] = /^(.+)(\$)([\d+,]+)$/.exec(text);
return {
amount: parts[3],
currencySymbol: parts[2],
text: parts[1]
};
}
И тогда это становится тривиальным для использования в вашем HTML:
<ul *ngIf="incomes">
<li *ngFor="let income of incomes">
<span>{{income.text}}</span>
<span class="strong">{{income.currencySymbol}}</span>
<span>{{income.amount}}</span>
</li>
</ul>
Я оставил сумму в виде строки в моем примере, но вы можете проанализировать его и рассматривать как число, чтобы вы могли применить свое собственное форматирование, если вы будете sh.
DEMO: https://stackblitz.com/edit/angular-do6joa
Regex demo: https://regex101.com/r/e4nLLO/2
Конечно, правильный ответ заключается в том, что ваш API должен возвращать данные в лучшем формате:)