Angularjs 这是使用$firebase()检索数组的最佳方法吗?

Angularjs 这是使用$firebase()检索数组的最佳方法吗?,angularjs,firebase,angularfire,Angularjs,Firebase,Angularfire,我在Firebase中存储了数组,当用户登录时,我需要检索其中一个数组。每个用户都有自己的数组,需要对读取进行身份验证。(切换到其他数据结构会很不方便)。因为$firebase()总是返回一个对象,所以我使用orderByPriority过滤器。然而,如果我只是 $scope.songs = $filter('orderByPriority')($firebase(myref)); 这不起作用,因为歌曲总是得到一个空数组 我不明白为什么会发生这种情况,但我所做的是使用$firebase().$

我在Firebase中存储了数组,当用户登录时,我需要检索其中一个数组。每个用户都有自己的数组,需要对读取进行身份验证。(切换到其他数据结构会很不方便)。因为
$firebase()
总是返回一个对象,所以我使用
orderByPriority
过滤器。然而,如果我只是

$scope.songs = $filter('orderByPriority')($firebase(myref));
这不起作用,因为
歌曲
总是得到一个空数组

我不明白为什么会发生这种情况,但我所做的是使用
$firebase().$on('loaded',cb)
表单并在回调中应用过滤器。这是一个好的解决方案吗

缺点是我无法执行
$scope.songs.$save()

这是我的控制器,包括此解决方案:

.controller('songListController', function($scope, $rootScope, $firebase, $filter, $firebaseSimpleLogin){

    var authRef = new Firebase('https://my-firebase.firebaseio.com/users'),
        dataRef;

    $scope.loginObj = $firebaseSimpleLogin(authRef);

    $scope.songs = [];

    $rootScope.$on("$firebaseSimpleLogin:login", function(event, user) {
        // user authenticated with Firebase
        dataRef = $firebase(authRef.child(user.id));
        dataRef.$on('loaded', function(data){
            $scope.songs = $filter('orderByPriority')(data);
        });
    });

    //other controller methods go here  

    $scope.save = function(){
        if (!$scope.loginObj.user) 
        {
            alert('not logged in. login or join.');
            return;
        }

        //Was hoping to do this 
        //$scope.songs.$save().then(function(error) {
        //but having to do this instead:
        dataRef.$set($scope.songs).then(function(error) {

            if (error) {
                alert('Data could not be saved.' + error);
            } else {
                alert('Data saved successfully.');
            }
        });
    };

});
---根据加藤的回答进行编辑---

我的应用程序的这一部分使用Firebase作为一个简单的CRUD json存储,没有任何实时方面。我使用
$set
来存储更改,所以我认为我可以使用数组。(我正在使用jQueryUI的Sortable,以便可以通过拖放对HTML
UL
进行重新排序,这似乎需要一个数组)。
对于应用程序的这一部分,我不需要与服务器进行实时同步。我有一个保存按钮,它触发了上面的
$scope.save
方法的使用。

上述方法的问题是orderByPriority生成数据的单个副本。它为空,因为$firebase尚未完成从服务器检索结果

如果要等待加载的
事件,它将包含以下数据:

var data = $firebase(myref);
data.$on('loaded', function() {
   $scope.songs = $filter('orderByPriority')(data);
});
但是,它仍然不会被同步。您需要监视更改并在每次更改事件后更新它(当您将orderByPriority用作DOM/view的一部分时,会自动发生这种情况)


请注意,0.8版本将有一个$asArray(),它将更接近您在这里想要的。另外,.

对不起,我应该考虑添加更多信息。请参阅有问题的编辑。
var data = $firebase(myref);
data.$on('change', function() {
   $scope.songs = $filter('orderByPriority')(data);
});