过滤器中迭代次数过多

时间:2014-06-30 11:56:06

标签: angularjs angularjs-ng-repeat

我创建了一个过滤器,用于通过id获取建筑物的名称:

app.filter('getBuilding', function( APIService ) {

    return function(input) {

        var buildings = APIService.query({ route:'building', id: input }, function(building) {

            return building.name;

        });

    };

});

该示例给出了迭代错误。这是一个ng-repeat更新问题吗?我该如何防止这种情况?

<li ng-repeat="room in rooms" class="list-group-item">
   <strong>{{room.name}}</strong><span class="small">( {{room.building | getBuilding}} )</span>
</li>

谢谢!

1 个答案:

答案 0 :(得分:1)

过滤器应用于格式化显示数据。您应该从过滤器函数返回一个原语(字符串或数字)以显示该值。

您的代码存在一些问题:

  1. 您的过滤器功能不会返回任何内容。因为filter不返回任何值,所以angularJS会继续迭代等待值。达到迭代限制后,将抛出错误。

  2. 您的服务使用回调。这在理论上工作的唯一方法是从APIService返回一个promise对象。但据我所知,过滤器不能以异步方式工作,也不能解决承诺。您必须立即返回一个值才能使过滤器正常工作。

  3. 可以多次调用过滤器函数,直到模型在范围更改中稳定为止。这意味着在过滤器中使用远程调用会产生严重的性能问题。

  4. 正确的方法是在控制器或指令中加载建筑物的名称,然后将该值传递给过滤器,如果名称需要以任何方式进行格式化。