调用嵌套在ng-repeat中的函数没有将正确的值返回到$ scope

时间:2015-09-07 16:20:00

标签: angularjs angularjs-ng-repeat

我正在尝试计算用户已回答的琐事问题的数量。对于每个问题(语句),其中值大于0 - 表示问题已得到解答。我可以在console.log中看到这些正确的值,但我无法获得显示在$ scope中或在前端显示的值:它显示一个数字,但该数字与console.log的结果不匹配:

html / haml:

categories(ng-repeat='category in service.categories' ng-class="{'first':$first}" )
.row(ng-click='showQuestions = !showQuestions' ng-class="{'ballotSelected' : showQuestions}")
  .label
    .chevron(ng-class="showQuestions ? 'fa fa-chevron-down ballotSelected' : 'fa fa-chevron-right'")
    .name.text-uppercase
      {{category.name}} {{category.statements.length}}
    .questionCount(ng-init='getStatementCount(category)')
      {{statementCounts}}
.showRow(ng-show='showQuestions')

控制器:

    $scope.getStatementCount = function(category) {
  var i, questionCount;
  console.log(category);
  i = 0;
  questionCount = 0;
  while (i < category.statements.length) {
    if (category.statements[i].value > 0) {
      questionCount += 1;
    }
    i++;
  }
  console.log(questionCount, 'COUNT');
  return $scope.statementCounts = questionCount;
};

1 个答案:

答案 0 :(得分:1)

每次拨打getStatementsCount()时,都会覆盖为所有类别显示的唯一范围变量statementCounts

这不可能是正确的。

所以,

  • 要么将结果存储在类别本身中,要在每个类别中显示类别的结果。只要加载/提供类别,就应该在控制器中不使用ng-init的情况下执行此操作。
  • 或者您没有为结果指定任何变量,并直接在页面中显示结果:

$scope.getStatementCount = function(category) {
    ...
    return questionCount;
}

.questionCount
  {{ getStatementCounts(category) }}