有没有办法可以清理按钮上的ng-class定义?

时间:2014-02-06 13:15:13

标签: angularjs

我正在使用:

    <button data-ng-repeat="question in test.testquestions"
            data-ng-class="{current: question.number == test.currentQuestion, correct: question.result == 't', incorrect: qh.result == 'f', shown: qh.result == 's', tagged: qh.tag == true}"
            data-ng-click="getDetail(qh.i, q.questionId)"
            data-ng-disabled="q.qs.i == qh.i">

代码可以工作,但是类定义很长,以至于我无法在编辑窗口中看到它。 有什么方法可以将它传播到多行,甚至可以在我的控制器中进行定义吗?

2 个答案:

答案 0 :(得分:2)

您当然可以从控制器获取它,但结果因ng-repeat中的测试而异,因此您需要从函数中获取它。您希望每次都避免返回不同的对象,因此您需要以某种方式缓存它。下面是使用test.currentQuestion的示例,假设它是一个简单的值类型(如int)。

var classes = {};

$scope.getClasses = function(question) {
  if(!classes[question.number]) {
    classes[question.number] = {};
  }

  var result = classes[question.number];
  result.current = question.number === $scope.test.currentQuestion;
  result.correct = question.result === 't';
  result.incorrect = question.result === 'f';
  result.shown = question.result === 's';
  result.tagged = question.tag === true;

  return result;
};

然后,您可以从您的视图中调用它:

data-ng-class="getClasses(test)"

答案 1 :(得分:1)

只需将ng-class表达式包装在新行上,就可以了。