@Neversmille

Как в ng-repeat angular посчитать и сохранить локальную переменную?

Всем привет.
Есть обычный привычный ng-repeat вида:
<div ng-repeat="(position, task) in Tasks.plannedTasks">
     {{(task.plan - (TasksTimeSpent[task.id][task.worker]).toFixed(2)}}
</div>

И вот появилась необходимость, если значение:
{{(task.plan - (TasksTimeSpent[task.id][task.worker]).toFixed(2)}}
< 0 - подкрасить блок в красный цвет
task.plan и task.worker могут меняться, что естественно влечет за собой изменение значения, которое нужно проверять
Можно ли както внутри ng-repeat грубо говоря присвоить разницу во временную переменную и дальше для вывода и условия на подсветку использовать ее? Не охота 2 раза считать одно и тоже.
Вариант расчетом значения заранее в контроллере не подходит т.к. это влечет за собой необходимость навешивания вотчера на задачи, а самое значение нигде по логике приложения не используется и необходимо только в этом блоке и только для наглядного отображения разницы 2ух показателей.
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
@Neversmille Автор вопроса
Решил проблему следующим образом:
<div
	ng-init="curDif=(task.scrum_task_final_plan - (TasksTimeSpent[task.scrum_task_pf_task_id][task.scrum_task_worker] || 0)).toFixed(2)"
>
	{{curDif}}
        <div ng-if="isOverdue(curDif)">
		<i class="fa fa-exclamation-triangle text-red" aria-hidden="true"></i>
	</div>
</div>


Да можно сказать, что выносить так логику на вьюху неоч. И тут я согласен, но в данном случае когда нужна просто иконка на которую пофиг в разрезе логики - это всеже лучше чем вотчер.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AMar4enko
@AMar4enko
Правильный выход из ситуации - обрабатывать таски при попадании в контроллер, а не при выводе.
При выводе у вас должен быть код:
<div ng-repeat="(position, task) in Tasks.plannedTasks" ng-class="{'is-overdue': task.isOverdue}">
     {{(task.plan - (TasksTimeSpent[task.id][task.worker]).toFixed(2)}}
</div>


После чего навешиваете на класс .is-overdue все, что вам надо.
Если по каким-либо причинам у вас нет единого места, где вы можете подготовить данные для дальнейшего использования, вы неверно спроектировали систему.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы