【问题标题】:Applying ng-class based on value基于值应用 ng-class
【发布时间】:2014-07-08 21:05:56
【问题描述】:

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

我想要做的是当值为负时,显示一个红色背景 CSS 类,当值为正时,显示一个绿色 CSS 类。但是,出于某种原因,我总是在我的页面上看到 red CSS 类。

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;
}

【问题讨论】:

    标签: angularjs angularjs-directive angularjs-ng-repeat ng-class angular-ng-if


    【解决方案1】:

    我以前没有见过这种特定的语法,{true: 'warning', false: 'ok'}[scores.Indicator == 'Negative'] 背后的基本原理是什么?

    我在这里使用ngClass的方式是

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

    这行得通吗?

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

    <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);
            }
        };
    }]);
    

    【讨论】:

    • 理性在答案 2 的后面:stackoverflow.com/questions/15397252/… 使用你的答案,我的行现在都是绿色的(即使是负面的)
    • 嗯..这很有趣,我想知道您的原始方法是否适用于"{true: 'warning', false: 'ok'}[(scores.Indicator == 'Negative')]? (例如,用括号将逻辑测试括在方括号中)
    • @OamPsy 好吧,现在我很困惑。我将您的 HTML 粘贴到 plnkr 中,效果很好。 plnkr.co/edit/p5rLB6cjNrTPVkWDnw9A?p=preview
    • 如上所述,我遇到了语法错误,您的解决方案有效
    猜你喜欢
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    相关资源
    最近更新 更多