我创建了一个过滤器,用于通过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 :(得分:1)
过滤器应用于格式化显示数据。您应该从过滤器函数返回一个原语(字符串或数字)以显示该值。
您的代码存在一些问题:
您的过滤器功能不会返回任何内容。因为filter不返回任何值,所以angularJS会继续迭代等待值。达到迭代限制后,将抛出错误。
您的服务使用回调。这在理论上工作的唯一方法是从APIService
返回一个promise对象。但据我所知,过滤器不能以异步方式工作,也不能解决承诺。您必须立即返回一个值才能使过滤器正常工作。
可以多次调用过滤器函数,直到模型在范围更改中稳定为止。这意味着在过滤器中使用远程调用会产生严重的性能问题。
正确的方法是在控制器或指令中加载建筑物的名称,然后将该值传递给过滤器,如果名称需要以任何方式进行格式化。