Ответ @Ulrich правильный, но я бы хотел остановиться на альтернативе, которую легко упустить.
То есть: вы предполагаете, что должен вызвать функцию внутрингфор.Что ж, это правда, если вы решите не обрабатывать данные.
Я бы попытался предварительно обработать данные при загрузке:
this.data.forEach(block => {
block.highlightKey1 = this.shouldHighlight(block.key1);
block.highlightKey2 = this.shouldHighlight(block.key2);
}
Если вы можете расширить модель, включив в нее данныетакже в этих дополнительных полях все более плавно:
<div *ngFor="let block of data;">
<div class="class-row">
<div class="left">A Label:</div>
<div [ngClass]="[block.highlightKey1 ? 'highlight' : '']" class="right">{{block.key1}}</div>
</div>
<div class="class-row">
<div class="left">Another Label:</div>
<div [ngClass]="[block.highlightKey2 ? 'highlight' : '']" class="right">{{block.key2}}</div>
</div>
</div>
Во время выполнения это решение будет работать немного лучше, поскольку при обнаружении изменений вызов функции не будет выполняться, а только при нагрузке.
Я тоже нахожу это чище, потому что "сложная логика" не будет вызываться напрямую шаблоном.