2014-06-30 67 views
0

太多的迭代创建过滤器的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> 

谢谢!

+0

如果您没有向我们展示绑定“房间”阵列的控制器,我们无法为您提供帮助。另外,如果你能提供一个可以工作的Plunker,那会很棒。 – domokun

回答

1

应使用过滤器来格式化显示器的数据。您应该从过滤器函数返回一个基元(一个字符串或数字)以显示该值。

有几个问题与您的代码:

  1. 你的过滤功能不返回任何东西。由于过滤器没有返回任何值,因此angularJS会不断重复等待一个值。达到迭代限制后,将引发错误。

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

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

正确的方法将被加载的建筑在控制器或指令的名称,然后通过该值过滤,如果名称需要以任何方式进行格式化。

+0

好吧,我明白了!谢谢! – nofear87