问题描述
我有一个简单的ng-repeat
,它显示分数列表以及正值或负值的值.
I have a simple ng-repeat
that displays a list of scores and a value of either Positive or Negative.
我想做的是当值是Negative时,显示红色的背景CSS类,而当Positive时,显示绿色的CSS类.但是,由于某些原因,我总是在页面上看到 red CSS类.
What i am trying to do is when the value is Negative, display a red background CSS class, and when Positive, display a green CSS class. However, for some reason, i am always seeing the red CSS class on my page.
HTML:
<tr ng-repeat="scores in Test" ng-class="{true: 'warning', false: 'ok'}[scores.Indicator == 'Negative']">
<td>Overall: {{ scores.Indicator }}</td>
</tr>
CSS:
.warning {
background: red;
}
.ok {
background: green;
}
推荐答案
我之前没有看到过使用的特定语法,{true: 'warning', false: 'ok'}[scores.Indicator == 'Negative']
背后的原理是什么?
I haven't seen that particular syntax used before, what's the rationale behind {true: 'warning', false: 'ok'}[scores.Indicator == 'Negative']
?
我在这里使用ngClass
的方式是
<tr ng-repeat="scores in Test" ng-class="{warning: (scores.Indicator == 'Negative'), ok: (scores.Indicator != 'Negative')}">
行得通吗?
为获得更好的可读性,您也可以将其委派给控制器
For better readability you could delegate it to the controller as well
<tr ng-repeat="scores in Test" ng-class="scoreClass(scores)">
$scope.scoreClass = function(scores) {
return scores.Indicator == 'Negative' ? 'warning': 'ok';
}
或者您可以创建指令
<tr ng-repeat="scores in Test" score-class scores="scores">
.directive('scoreClass', [function() {
return {
restrict: 'A',
scope: {
scores: '=',
},
link: function(scope, element, attrs, controller) {
scope.$watch('scores', function() {
element.removeClass('ok');
element.removeClass('warning');
if (scope.scores.Indicator == 'Negative') {
element.addClass('warning');
} else {
element.addClass('ok');
}
}, true);
}
};
}]);
这篇关于基于价值应用ng-class的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!