正如其他答案所确定的那样,您需要拆分文本。我对此的偏好是在模拟收入文本的不同部分的界面中创建。
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>
在我的示例中,我将金额作为字符串保留,但您可能希望对其进行解析并将其视为数字,以便您可以根据需要应用自己的格式。
演示:https ://stackblitz.com/edit/angular-do6joa
正则表达式演示:https ://regex101.com/r/e4nLLO/2
当然,正确的答案是您的 API 应该以更好的格式返回数据 :)