Я должен установить завод, и я хочу, чтобы он возвращал данные, которые он получает от пожарной базы. Завод такой:
.factory('companyFactory', function($firebaseArray) {
var itemsRef = new Firebase("https://somename.firebaseio.com/");
var allNodes=$firebaseArray(itemsRef);
var myObject={
getNames: function() {
itemsRef.once("value", function(snapshot) {
var nameSnapshot = snapshot.child("companyName");
var name = nameSnapshot.val();
return name; //this does not return the data
});
}
}
return myObject;
});
В моем контроллере я делаю это:
$scope.companies=companyFactory.getNames();//not working
Что я должен сделать, чтобы это работало. Я хочу получить данные один раз, а затем откорректировать их, используя фабрику для разных видов
itemsRef.once
для Firebase являются асинхронными, поэтому вам нужно использовать обещание для возврата names
.
var myObject={
getNames: function() {
var defer = $q.defer();
itemsRef.once("value", function(snapshot) {
var nameSnapshot = snapshot.child("companyName");
var name = nameSnapshot.val();
defer.resolve(name); //this does not return the data
});
return defer.promise;
}
И в вашем кодовом коде вам нужно использовать алгоритм обратного вызова для получения данных.
companyFactory.getNames().then(function(data) {
$scope.companies=data;
});
getNames
. Внутренний возврат не влияет на getNames напрямую.