angular - 将管道的结果声明为局部变量

angular - declare result of pipe as local variable

我在一个标签中两次使用了 ngx-pipe 的百分比管道。一次确定哪种颜色 class(成功或信息),一次显示百分比。

<label class="label" [ngClass]="(item.amount |
percentage:item.total) >= 100 ? 'label-success' : 'label-info'">Progress {{item.amount | percentage:item.total:true}}%</label>

有没有一种方法可以将管道的结果存储为本地模板变量一次,例如

<label class="label" #percent="(item.amount |
percentage:item.total)" [ngClass]="percent >= 100 ? 'label-success' : 'label-info'">Progress {{percent}}%</label>

我知道您可以将它存储在 *ngIf 或 *ngFor 指令中,例如

<div *ngIf="item$ | async as item">

<div *ngIf="item$ | async; let item">

是否有类似的方法解决我的问题?

据我所知,现在不可能在运行时编写计算绑定的别名(*ngFor with pipe 是例外),但你可以做的是。创建一个 function/Pure pipe 并将记忆应用于该函数,这样计算量就会减少。

<label class="label" 
  [ngClass]="getPercentage(item) >= 100 ? 'label-success' : 'label-info'">
     Progress {{getPercentage(item)}}%
</label>

组件

calculation: any = {};
percentage = new PercentPipe();
// below function can be stay as pure Pipe as well.
getPercentage (item) {
   let key = `${item.amount}-${item.total}`
   if(!calculate[key]) calculate[key] = percentage.transform(item.amount, item.total, true);
   return calculate[key];
}

通过这个解决方案,我们计算一次价值并在其他地方使用它。但不是在模板变量中,而是在组件中记住最后计算的值。