Угловой фильтр JS-номера-изменение цвета при отрицательном значении
Я применяю числовой фильтр к результату функции:
<tr class="text-center">
<th class="text-center">{{monthCategoryTotalPredict = getCategoryMonthTotal(costDirection, month, category, "predict") | currency:currencySymbol}}</th>
<th class="text-center">{{monthCategoryTotalActual = getCategoryMonthTotal(costDirection, month, category, "actual") | currency:currencySymbol}}</th>
<th class="text-center">{{calculateSurplus(monthCategoryTotalPredict, monthCategoryTotalActual) | currency:currencySymbol}}</th>
</tr>
отрицательные числа представлены следующим образом по умолчанию: (£230.00).
моя цель-заставить их также изменить цвет на красный. Как я могу это сделать в Angular JS? Это может быть частью фильтра? Могу ли я переопределить фильтр, чтобы немного изменить его поведение по умолчанию без полной перезаписи?
спасибо заранее!
5 ответов
чтобы изменить цвет текста в HTML, вам нужно будет изменить его элемент контейнера. Поскольку фильтр не знает об элементе, вы можете либо ввести его (плохая идея), либо использовать директиву вместо фильтра.
включение функции в ваш код на самом деле является плохим способом обработки вещей. Возможно, ему придется стрелять несколько раз и, безусловно, испортит любую сортировку, которую вы попытаетесь.
<th class="text-center" ng-class="{ red: calculateSurplus(monthCategoryTotalPredict, monthCategoryTotalActual) < 0 }">{{calculateSurplus(monthCategoryTotalPredict, monthCategoryTotalActual) | currency:currencySymbol}}</th>
Я бы честно выполнил эти вычисления раньше время, чтобы все выглядело вот так.
<th class="text-center" ng-class="{ red: surplus < 0 }">{{surplus | currency:currencySymbol}}</th>
вы можете использовать ng-class для определения условных классов. Вы можете создать класс css, который представляет числа как красные и использовать его в атрибуте ng-class.
например:
<td ng-class="{'className': variable < 0}">{{variable}}</td>
подробная документация:http://docs.angularjs.org/api/ng.directive:ngClass
вы также можете использовать ng-style и добавить функцию к контроллеру.
например:
$scope.negativeValue=function(myValue){
var num = parseInt(myValue);
if(num < 0){
var css = { 'color':'red' };
return css;
}
}
<td ng-style="negativeValue(myScopeValue)">{{ myScopeValue | currency }}</td>
попробовать
<th class="text-center" ng-class="{myRedClass: monthCategoryTotalPredict <0}" >
{{monthCategoryTotalPredict = ......}}</th>
затем добавьте правило класса css для изменения цвета
вот как это было сделано в моем приложении.
все вышеперечисленные решения будут пересчитывать значение, которое может быть неэффективным, если оно является результатом функции.
angular.module("myApp", [])
.controller("myCtrl", myCtrl)
.directive("colorUp", colorUp)
function myCtrl($scope) {
$scope.num1 = 1
$scope.num2 = -1
$scope.num3 = 0
}
function colorUp() {
return {
restrict: "A",
link: linkFunc
}
function linkFunc (scope, element, attributes) {
//adding an event handler to see elements' value changes
element.on("DOMSubtreeModified", onValChange)
function onValChange () {
var eleVal = deComma(element.text())
var color = (eleVal > 0) ? "green": (eleVal < 0) ? "red": ""
element.attr("class", "ng-binding " + color)
}
function deComma(text) {
return (text ? (text+"").replace(/,/g, "") : "")
}
}
}
<!DOCTYPE html>
<html>
<head>
<script src="https://code.angularjs.org/1.4.8/angular.js"></script>
<script src="script.js"></script>
<style>
.red {color: red;}
.green {color: green;}
input { width : 50px;}
</style>
</head>
<body ng-app="myApp" ng-controller="myCtrl">
<h3>Reusable Custom directive for coloring nums.</h3>
<input type="number" ng-model="num1" placeholder="Enter first number here!!">
<label color-up>{{num1 | number:2}}</label>
<br>
<input type="number" ng-model="num2" placeholder="Enter second number here!!">
<label color-up>{{num2 | number:2}}</label>
<br>
<input type="number" ng-model="num3" placeholder="Enter second number here!!">
<label color-up>{{num3 | number:2}}</label>
</body>
</html>
вот ссылка plunker :- http://plnkr.co/edit/X42mE9LpagGRrasOckqQ?p=preview
надеюсь, что это помогает!!