我遇到了一种情况,我必须从 ng-repeat 表达式中更新范围变量(实际上是 ng-repeat 中的 ng-class 调用)。
<div id="page" ng-controller="MainCtrl">
.
<section id="body" ng-init="countMis = {num:0}">
.
<tbody>
<tr ng-repeat="upperCaseLetter in alphabet.specialsUpper" ng-controller="letterController">
<td>{{upperCaseLetter}}</td>
<td>{{filteredLetter=(upperCaseLetter | lowercase)}}</td>
<td>{{alphabet.specialsLower[$index]}}</td>
<td><span ng-class="lowercaseEqual($index,filteredLetter)"></span></td>
</tr>
</tbody>
在 app.js 中:
function letterController($scope)
{
$scope.lowercaseEqual = function(indx,letter)
{
var returnStr="";
if(letter == $scope.alphabet.specialsLower[indx])
{
returnStr = "glyphicon glyphicon-ok";
}
else
{
$scope.countMis.num = $scope.countMis.num + 1;
returnStr = "glyphicon glyphicon-remove";
}
return returnStr;
};
}
Ng-repeat 在子控制器中,我要更新的数据在其父控制器中。我知道您已经多次阅读相同的问题,请继续阅读并查看JsFiddle示例。
因此,表达式函数检查该特定 ng-repeat 迭代的过滤数据,如果它与其他一些相应的父范围变量不匹配,它会返回一个类,但它也应该更新父范围计数器。由于这些表达式不只计算一次,而是至少计算一次(由于摘要中的脏检查),它会导致计数器在每种情况下都增加一次以上。
我已经通过在 ng-repeat 之后计算应用于该特定数据的类来解决我的问题(您将在JsFiddle示例中看到)。但是我想我将来可能会遇到同样的问题,所以我想学习如何在 ng-repeat 迭代的表达式中更新父范围。
我已经放了第二个JsFiddle,我尝试在父控制器和子控制器上使用工厂,希望更新两个控制器的公共变量。当我记录(consol.log)每个迭代和工厂方法变量时,它显示迭代时间 + 1(仍然是错误值),但它没有反映在页面表达式上......根本没有意义。
我会很感激任何帮助。谢谢。