2017-01-31 8 views
0

私はキーの配列を持っており、firebaseのオブジェクトの他のリストからこのキーを持つオブジェクトを取得したいと思います。それは今見えますか?私はサービスのメソッドへのパラメータとしてインデックスのリストを渡しました。そこをループして、すべてのオブジェクトを取得し、コントローラに読み込まれた配列にプッシュします。しかし、私はそれが醜いと思う。一度にforebaseを使わずにfirebaseからすべてのオブジェクトを取得し、その後$ apply()を呼び出す方法は?私はそれを少し簡略化しましたが、アイデアは明らかだと思います。 おかげPromise.allmapを使用してコントローラ一度にfirebaseからリストを取得するには?

(function() { 
angular.module("app").controller('app.Ctrl', appCtrl); 

appCtrl.$inject = ['app.factory', '$scope']; 


function listingsCtrl(appFactory, $scope) { 

    $scope.loadListing = function(list) { 

     listingsFactory.loadList(list); 
     $scope.list = listingsFactory.ListingData; 

    } 

    // load list by default 
    $scope.loadListing(list); 

    } 
})(); 
+0

はそれをはるかに簡単にするためにangularFireを見てかかることがあります – charlietfl

答えて

0

は、物事が少し楽になるかもしれない

工場

(function() { 
    angular.module("app").factory('app.factory', appFactory); 

    appFactory.$inject = ['$rootScope'] 

function appFactory($rootScope) { 
self.loadList = function(list) { 
    self.ListingData = []; 
    angular.forEach(list, function(val, key) { 
     db.child('listings').child(key).once('value').then(function(product) { 
      var value = product.val(); 
      $rootScope.$apply(function() { 
       self.ListingData.push(value); 
      }); 
     }).catch(function(error) { 
      console.log(error); 
     }); 

    }); 

}; 

    return self; 


    } 
})(); 

self.loadList = function (list) { 

    var getListings = list.map(function (val, key) { 
    return db.child('listings').child(key).once('value'); 
    }); 

    Promise.all(getListings) 
    .then(function (products) { 
     self.ListingData = products.map(function (product) { 
     return product.val(); 
     }); 
    }) 
    .catch(function (error) { 
     console.log(error); 
    }); 
}; 
関連する問題