Я пытаюсь получить новые запросы Firebase, работающие на моем заводе, но я застрял. Я хочу вернуть значение «логотипа» из таблицы моих оппонентов на основе имени оппонента. Я могу получить пример с console.log
из Firebase Docs работает:Как использовать запрос Firebase в угловой фабрике?
function OpponentService($firebase) {
var factory = {};
var _url = 'https://somefirebaseproject.firebaseio.com/opponents';
var _ref = new Firebase(_url);
factory.getLogo = function(opponent) {
_ref.orderByChild('name').equalTo(opponent).on("child_added", function(snapshot){
console.log(snapshot.val().logo);
});
};
return factory;
}
Когда я называю мою фабрику с OpponentService.getLogo(opponentName)
в мой контроллер, я получаю правильный логотип идентификатор в моей консоли. Но как я могу вернуть значение вместо отправки его на консоль? Я хочу сохранить его в переменной вроде этого: $scope.opponentLogo = OpponentService.getLogo(opponentName)
. Я попробовал несколько вариантов с ответным заявлением, как это:
factory.getLogo = function(opponent) {
_ref.orderByChild('name').equalTo(opponent).on("child_added", function(snapshot){
return snapshot.val().logo;
});
};
Но, видимо, я не в полной мере понять, как заводы работают в Угловое, потому что я получаю undefined
. Может быть, ценность пока недоступна, и я должен каким-то образом использовать обещание? Любой, кто может указать мне в правильном направлении?
Спасибо за ваш ответ, я проверю сегодня, если это сработает. Я уже использую AngularFire, так что это должно быть легко сказать? – Lennert
Вы пытаетесь вернуть логотип для одного противника? Вам нужен доступ или привязка к другим свойствам противника в вашем приложении? –
Да в этом методе мне нужно только вернуть логотип для одного противника. Но весь завод содержит больше методов, например 'factory.getAllOpponents'. – Lennert