@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ух показателей.
  • Вопрос задан
  • 150 просмотров
Решения вопроса 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 все, что вам надо.
Если по каким-либо причинам у вас нет единого места, где вы можете подготовить данные для дальнейшего использования, вы неверно спроектировали систему.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы