在下面的代码片段中,我为 3 个不同的属性呼叫了名为 isSiteAlreadyAdded(site.id) 的相同函式。有什么方法可以存盘特定选项标签的值并将其用于给定的选项属性?
<div class="template-form-input-container">
<select style="width: 100%;" id="sites" [(ngModel)]="site" name="sites" #sites="ngModel" required>
<option [ngValue]="null" selected>Select Site</option>
<option *ngFor="let site of sitesToAdd" [ngValue]="site" data-toggle="tooltip" data-placement="top" title="{{isSiteAlreadyAdded(site.id) ? 'Site is already added.':''}}" [ngClass]="{'alert alert-secondary': isSiteAlreadyAdded(site.id)}" [disabled] = "isSiteAlreadyAdded(site.id)">{{site.name}}</option>
</select>
</div>
uj5u.com热心网友回复:
正如@dan vid 的链接帖子中所述,模板中的函式呼叫是一种不好的做法,因为它们将在每次更改检测滴答时执行。
因此,您可以使用管道,也可以预先计算相应的值。
管道
如果您使用的是管你还算值多次,但只有当的管道变化的输入值,它通过减少重新计算的次数不少相比,在模板函式呼叫。
一个基本的管道看起来像这样:
@Pipe({ name: 'isAlreadyActive' })
export class IsAlreadyActivePipe implements PipeTransform {
transform(id: string): boolean { // <- or any other return type instead of boolean
// Implement your check and return the result
}
}
您的情况下的电话如下所示:
<option
...
title="{{ site.id | isAlreadyActive ? 'Site is already added.': '' }}"
...
>
{{site.name}}
</option>
您将在此处找到有关管道的更多信息。
将条件结果存盘在变量中
还可以将管道回传值存盘在变量中(请参阅此处)。
这看起来像这样:
<ng-container *ngIf="site.id | isAlreadyActive as isActive">
<option
...
title="{{ isActive ? 'Site is already added.': '' }}"
...
>
{{site.name}}
</option>
</ng-container>
在此示例中,我们已将结果存盘在其中,isActive
并且您的计算只会执行一次,但只要回传值是falsy
的内容*ngIf
就不会显示。
例如,在您的情况下,您可以回传而不是简单的布林值和包含布林值的物件,例如, { isActive: returnValue }
。这样你的回传值就会是truthy
,内容会被显示。
预计算
另一种选择是预先计算组件中的值并将该值分配给site.isActive
作为示例。这样你就只有一个计算,这也比从模板呼叫函式要好。
0 评论