我有一个像下面这样的AngularJS应用程序。 orderBy仅在我将其直接绑定到硬编码数据时才有效。如果我绑定从HTTP返回(注释掉的行)接收的数据,则排序停止工作。
评级确实会更新并反映在用户界面中,但动态排序并未启动。这可能是什么问题?我使用Firebase,这肯定会导致一些问题。
注意:HTTP调用未经身份验证,应该适用于所有人。
<html lang="en" ng-app>
<body >
<div ng-controller="hotelsController" >
<div ng-repeat="hotel in hotels | orderBy : 'rating' ">
<div ng-bind="hotel.name"></div>
<div ng-bind="hotel.rating"></div>
<button ng-click="up(hotel)">up</button>
</div>
</div>
<script src="angular.min.js"></script>
<script type="text/javascript">
function hotelsController($scope, $http) {
$http({method: 'GET', url:'https://blazing-fire-1297.firebaseio.com/hotels.json'}).
success(function(data, status, headers, config) {
//$scope.hotels = data;
$scope.hotels = [{
name:'somethig',
rating: 2
},
{
name:'anything',
rating: 2
},
];
});
$scope.up = function(hotel){
hotel.rating ++ ;
}
}
</script>
</body>
</html>
答案 0 :(得分:3)
没关系 - 显然这是Firebase的问题以及它如何返回对象。要解决此问题,只需使用https://github.com/firebase/angularFire/blob/master/angularfire.js#L37处提供的orderByPriority过滤器。
应用该过滤器后,您可以照常应用其他过滤器。 orderByPriority过滤器将其转换为对象数组。
我在Stack Overflow问题 A orderby object filter for a pure Firebase JavaScript API 中找到了解决方案。