ng-repeat 下的 ng-disabled 函数调用正在无限循环中进行

Posted

技术标签:

【中文标题】ng-repeat 下的 ng-disabled 函数调用正在无限循环中进行【英文标题】:ng-disabled function call is going in infinite loop under ng-repeat 【发布时间】:2016-05-20 18:43:16 【问题描述】:

我正在使用 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>

下面是角度控制器中的 myfunction '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);
        
    );

【问题讨论】:

【参考方案1】:

永远不要将指令绑定到执行资源调用的函数。摘要循环频繁运行,这将导致您的应用程序发出大量请求。

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

【讨论】:

有什么替代解决方案吗? 如第二段所述。 sry,我不太了解,你能告诉我如何存储在以 seriesList 中的项目为键的哈希中吗? 从您的后端添加填充seriesList 的代码,我会尝试。还有一个与您的 seriesList 相同的 JSON 结构示例 $scope.getAllSeries = function() $http.get('/admin/viewSeries', options) .then(function successCallback(response) if(response.data) $scope. seriesList = response.data; , 函数 errorCallback(response) if(response.status == "401") $window.location = "#/login" ); ;

以上是关于ng-repeat 下的 ng-disabled 函数调用正在无限循环中进行的主要内容,如果未能解决你的问题,请参考以下文章

ng-if ng-repeat下的ng-model赋值

angularJs 学习笔记

AngularJs 指令

ng-disabled的使用

无法添加 ng-disabled 指令 ngJoyride

我如何在 iframe 中使用 ng-disable