ng-禁用函数调用在 ng-repeat 下处于无限循环中

ng-disabled function call is going in infinite loop under ng-repeat

本文关键字:无限循环 ng-repeat 函数调用 ng-      更新时间:2023-09-26

>我正在使用ng-repeat从集合中填充一个表,在此我有一个复选框,我想禁用该复选框是某些条件返回true。但是,当我加载页面时,我的函数处于无限循环中。

这是我的 html:

<tr ng-repeat="s in seriesList track by $index">
    <td><input id="id{{$index+1}}" class="checkbox-custom" type="checkbox" ng-disabled="checkNumbersExitsForSeries(s.series_name)" ng-model="s.selected" ng-click="tickCheck(s, s.selected)">
        <label for="id{{$index+1}}" class="checkbox-custom-label">&nbsp;</label>
    </td>
    <td class="mailbox-name" style="width:350px;">{{s.series_name}}</td>
    <td><input type="button" ng-click="editSeries(s)" value="Edit" name="edit" class="btn btn-info" /></td>
</tr>

以下是角度控制器中的my函数"checkNumbersExitsForSeries":

 $scope.checkNumbersExitsForSeries= function(series_name){
    console.log("in");
     var params = {
                'seriesName': series_name
            };
    $http.post('/admin/checkNumbersExistsForSeries', params, options)
    .then(function successCallback(response){
    if(response.data.success)    
    {
        console.log("response");
        return true;
    }
    else{
        console.log("no response");
        return false;
    }
    },function errorCallback(response){
        if(response.status = '401')
            $window.location = "#/login"
    });
};

下面的代码是我的节点控制器:

exports.checkNumbersExistsForSeries = function(req, res)
{
    numberRegisterModel.find({series:req.body.seriesName, status:{$ne:'deleted'}}, function(err, data){
        if(data){
            console.log("got it");
            res.json({success:true, data1:data});
        }
        else{
            console.log("not got it");
            console.log("error :" + err);
        }
    });
}

切勿将指令绑定到执行资源调用的函数。摘要周期频繁运行,这将导致应用程序发出大量请求。

您的checkNumbersExitsForSeries()函数正是这样做的。解决方案是在从后端加载seriesList时对其进行迭代,然后为每个条目调用checkNumbersExitsForSeries()(甚至使其成为批处理调用),并将结果存储在由seriesList中的项键入的哈希中。