Угловой фильтр 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
надеюсь, что это помогает!!
