使用异步数据时,AngularJS中的动态排序会中断

时间:2014-05-21 18:00:25

标签: angularjs firebase

我有一个像下面这样的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>

1 个答案:

答案 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 中找到了解决方案。