将数据保存到新数组时出错:[$ rootScope:infdig]

时间:2014-01-27 18:59:39

标签: javascript angularjs binding

我有角度控制器,看起来像这样:

app.controller('AppCtrl', function ($scope, serverData) {
    $scope.playersData = function() {
        var players = [],
            listed = [], name;

        serverData.forEach(function(result) {
            name = result.name;
            if(listed.indexOf(name) === -1) {
                 players.push({
                       name: name,
                       scoreSum: 20
                    });
                listed.push(name);
            }
        });

        return players;
    };
});

serverData在app中创建,如下所示:app.value('serverData', [...])

如果我在这样的模板中使用它:<li ng-repeat="player in playersData() | orderBy:'name'">{{player.name}}</li>

我收到错误:[$ rootScope:infdig] 我读了http://docs.angularjs.org/error/ $ rootScope:infdig,但我不明白,我的绑定错在哪里。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您将收到此错误,因为您的playersData函数会更改您的模型。当摘要发生时,您的playesrData()函数会运行,然后将值插入您的玩家对象...当角度看到模型已更改时,它会运行摘要。

当摘要运行时,playersData将执行,模型将更改...当模型更改摘要运行时。当摘要运行时,playersData将执行,模型将更改...当模型更改摘要运行时。当摘要运行时,playersData将执行,模型将更改...当模型更改摘要运行时。

然后它放弃......

此外,看起来你的控制器正在返回你的playeresData函数本地的var ...这很奇怪,我不知道你在那里尝试做什么。 / p>

答案 1 :(得分:0)

也许您正在寻找类似this

的内容

它是你问题的一个有效例子;)