如何使用ng-class将一个类绑定到一个值

时间:2014-02-21 03:43:30

标签: javascript angularjs ng-class

我想再将一个类绑定到一个值,如下所示:

ng-class="{first: isTrue, second: isTrue, third: isTrue}"

ng-class是否存在任何使用都可以将它们绑定一次,就像这样? (下面的代码不起作用)

ng-class="{[first, second, third]: isTrue}"

2 个答案:

答案 0 :(得分:2)

事实证明,当值为true时,单引号中的属性名称将直接添加到类中。

ng-class="{'first second third': isTrue}"

作品。

答案 1 :(得分:1)

您需要了解的有关ng-class指令的内容是,您传入的值实际上是粗略,就好像它实际上是JavaScript一样。 (我相信它实际上使用$scope.$eval。)这意味着您可以调用$scope上可用的函数来生成类哈希对象。我非常喜欢你提出的解决方案,获取你需要的类并将它们分开,但是如果你有一个动态的类列表要用于元素呢?由于语法粗略 JavaScript,因此无法通过执行{list.join(' '): isTrue}来构建对象(因为这在JavaScript中无效)。但是,您可以做的是编写一个函数并将其添加到执行该操作的范围:

angular.module('app')
  .controller('MyCtrl', function($scope) {
    $scope.myList = ['first', 'second', 'third'];

    $scope.allOrNoneClasses = function(list, condition) {
      var o = {};
      if (condition) {
        o[list.join(' ')] = true;
      }
      return o;
    };
    $scope.scopeBasedClasses = function(list) {
      var o = {};
      list.forEach(function(class){
        // this applies a class which matches the scope attribute if
        // the attribute evaluates to a truthy value.
        o[class] = $scope.$eval(class);
      });
      return o;
    };
  });

然后可以在HTML中使用它,如下所示:

<div ng-class="allOrNoneClasses(myList, isTrue)" />