基于值应用ng-class

Oam*_*Psy 11 angularjs angularjs-directive angularjs-ng-repeat ng-class angular-ng-if

我有一个简单的ng-repeat显示分数列表和正面或负面的值.

我想要做的是当值为Negative时,显示红色背景CSS类,当为Positive时,显示绿色CSS类.但是,出于某种原因,我总是在我的页面上看到红色的 CSS类.

HTML:

<tr ng-repeat="scores in Test" ng-class="{true: 'warning', false: 'ok'}[scores.Indicator == 'Negative']">                       
     <td>Overall: {{ scores.Indicator }}</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

CSS:

.warning {
    background: red;
}

.ok {
    background: green;
}
Run Code Online (Sandbox Code Playgroud)

iva*_*rni 30

我还没有看到之前使用的特定语法,背后的理由是{true: 'warning', false: 'ok'}[scores.Indicator == 'Negative']什么?

ngClass在这里使用的方式是

<tr ng-repeat="scores in Test" ng-class="{warning: (scores.Indicator == 'Negative'), ok: (scores.Indicator != 'Negative')}">
Run Code Online (Sandbox Code Playgroud)

那样有用吗?

为了更好的可读性,您也可以将其委托给控制器

<tr ng-repeat="scores in Test" ng-class="scoreClass(scores)">

$scope.scoreClass = function(scores) {
    return scores.Indicator == 'Negative' ? 'warning': 'ok';
}
Run Code Online (Sandbox Code Playgroud)

或者你可以创建一个指令

<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);
        }
    };
}]);
Run Code Online (Sandbox Code Playgroud)