Angularjs ng中的角函数显示有一定误差

Angularjs ng中的角函数显示有一定误差,angularjs,ng-repeat,digest,angular-promise,ng-show,Angularjs,Ng Repeat,Digest,Angular Promise,Ng Show,我正在为我的应用程序使用Restanglar。假设我认为: <div ng-repeat="resource in resources"> <i ng-show="isCheckedLabel(resource)" class="fa fa-checked"> Checked </i> </div> 这是我的check函数,它将返回true或false $scope.isCheckedLabel = function(resource){

我正在为我的应用程序使用Restanglar。假设我认为:

<div ng-repeat="resource in resources">
    <i ng-show="isCheckedLabel(resource)" class="fa fa-checked"> Checked </i>
</div>
这是我的check函数,它将返回true或false

$scope.isCheckedLabel = function(resource){
    $scope.getResourcePromise.then(function(){
        for(var group in resource.groups){
            for(i = 0; i < resource.groups.length; i++){
                if (resource.groups[group].isChecked === true){
                    return true;
                } else {
                    return false;
                }
            }
        }
    });
};

它只是不断地发射。这是怎么回事?

只有在$digest运行时尝试更新dom时,才会发生此错误。在本例中,您可以尝试将选中的变量设置为$scope变量资源中的另一个属性

$scope.getResources = function () {
    $scope.getResourcePromise = ResourceService.getResourceById($stateParams.id).then(function (response) {
        $scope.resources = response;
        $scope.resources.forEach(function (resource) {
            $scope.getResourcePromise.then(function () {
                for (var group in resource.groups) {
                    for (i = 0; i < resource.groups.length; i++) {
                        if (resource.groups[group].isChecked === true) {
                            //Here setting another property on the resource object
                            resource.checked = true;
                        } else {
                            resource.checked = false;
                        }
                    }
                }
            });
        });
    });
};
$scope.getResources=函数(){
$scope.getResourcePromise=ResourceService.getResourceById($stateParams.id)。然后(函数(响应){
$scope.resources=响应;
$scope.resources.forEach(函数(资源){
$scope.getResourcePromise.then(函数(){
for(resource.groups中的变量组){
对于(i=0;i
现在,在HTML中,您可以简单地执行以下操作:

<div ng-repeat="resource in resources">
    <i ng-show="resource.checked" class="fa fa-checked"> Checked </i>
</div>

选中的

首先也是最重要的是在async
中返回一个值,然后
回调将不是
isCheckedLabel
的返回值

查看代码时,不需要
$scope.getResourcePromise。然后
中的
会检查标签
,因为您已经将资源对象作为参数传递。同样,for循环代码似乎是错误的。换成

$scope.isCheckedLabel = function(resource){
        for(var group in resource.groups){
           if (group.isChecked === true){
              return true;
           } else {
              return false;
          }
        }
};

有趣的解决方案,我喜欢。但是,我在应用程序的其他部分发布整个对象。我希望避免向资源对象添加属性。我是ganna,请尝试使用angular.copy()避免更改原始对象。谢谢@DeepakN此解决方案有效。。。我以为我已经试过了,但是得到了一个未定义的错误,但是我忘记了我的控制器底部有$scope.isCheckedLabel(),并且在承诺解决之前正在执行。在我看来,您的循环仍然是错误的,它只会检查第一个值,因为您在第一次迭代时必须有一个
return
语句
<div ng-repeat="resource in resources">
    <i ng-show="resource.checked" class="fa fa-checked"> Checked </i>
</div>
$scope.isCheckedLabel = function(resource){
        for(var group in resource.groups){
           if (group.isChecked === true){
              return true;
           } else {
              return false;
          }
        }
};