避免在angular中多次調(diào)用函數(shù)

在下面的代碼片段中,我正在為3個(gè)不同的屬性調(diào)用名為isSiteAlreadyAdded(site.id的相同函數(shù)。是否有任何方法可以存儲(chǔ)特定選項(xiàng)標(biāo)記的值,并將其用于給定的選項(xiàng)屬性?

<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>
? 最佳回答:

正如@dan vid的鏈接帖子中所述,模板中的函數(shù)調(diào)用是一種不好的做法,因?yàn)樗鼈儗⒃诿看胃臋z測時(shí)執(zhí)行。

因此,您可以使用管道,也可以pre-calculates指定相應(yīng)的值。

Pipe

如果使用管道,仍然會(huì)多次計(jì)算值,但前提是管道的輸入值發(fā)生變化,這與模板中的函數(shù)調(diào)用相比,會(huì)大大減少re-calculation的次數(shù)。

基本管道如下所示:

@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>

你可以在這里找到更多關(guān)于管道的信息。

將條件結(jié)果存儲(chǔ)在變量中

還可以將管道返回值存儲(chǔ)在變量中(請(qǐng)參見此處)。

這看起來像這樣:

<ng-container *ngIf="site.id | isAlreadyActive as isActive">
  <option  
    ...
    title="{{ isActive ? 'Site is already added.': '' }}" 
    ...
  >
  {{site.name}}
  </option>
</ng-container>

在本例中,我們將結(jié)果存儲(chǔ)在isActive中,您的計(jì)算只會(huì)執(zhí)行一次,但只要返回值為falsy,就不會(huì)顯示*ngIf的內(nèi)容。

例如,在您的例子中,您可以返回一個(gè)包含布爾值的and對(duì)象,而不是一個(gè)簡單的布爾值,例如,{ isActive: returnValue }。這樣,您的返回值將為truthy,并且將顯示內(nèi)容。

Pre-Calculation

另一個(gè)選項(xiàng)是pre-calculate組件中的值,并將該值分配給site.isActive作為示例。這樣,您只需進(jìn)行一次計(jì)算,這也比從模板調(diào)用函數(shù)要好。

主站蜘蛛池模板: 国产成人精品一区二三区在线观看| 国产激情无码一区二区app| 国产成人一区二区三区视频免费| 亚洲欧洲精品一区二区三区| 国产一区二区福利久久| 无码人妻精品一区二| 亚洲宅男精品一区在线观看| 无码国产伦一区二区三区视频| 亚洲欧洲一区二区| www一区二区三区| 国产激情з∠视频一区二区| 国产一区在线播放| 在线电影一区二区三区| 国产精品毛片a∨一区二区三区| 日本免费电影一区二区| 国产激情一区二区三区小说| 亚洲成av人片一区二区三区 | 国产欧美一区二区精品仙草咪 | 亚洲综合一区国产精品| 国产一区中文字幕| 亚洲国产精品第一区二区三区| 精品亚洲一区二区三区在线观看| 人妻久久久一区二区三区 | 国产精品一区二区久久精品| 男人免费视频一区二区在线观看| 精品国产一区二区三区久久| 国产一区麻豆剧传媒果冻精品| 糖心vlog精品一区二区三区| 午夜福利国产一区二区| 亚洲一区二区在线免费观看| 国产一区二区精品久久岳√| 日本一区二区三区久久| 久久91精品国产一区二区| 亚洲日韩激情无码一区| 国模无码视频一区二区三区| 久草新视频一区二区三区| 久久青草国产精品一区| 高清一区二区三区视频| 亲子乱AV视频一区二区| 亚洲AV色香蕉一区二区| 日韩一区二区三区视频久久|