2013-04-29 7 views
9

В примерах angularFire показано, как получить коллекцию объектов из firebase.Единый объект AngularFire

app.controller('ctrl', ['$scope', '$timeout', 'angularFireCollection', 
    function($scope, $timeout, angularFireCollection) {  
    var url = 'https://ex.firebaseio.com/stuff'; 
    $scope.col = angularFireCollection(url); 
    } 
]); 

Как насчет одного объекта?

Я пытался что-то вроде этого:

fb.child('stuff/'+id).on('value', function(snapshot) { 
    $scope.obj = snapshot.val(); 
    console.log('hey got the value') 
    console.log(snapshot.val()) 
    }); 

, кажется, не работает. Консоль выводит значение объекта правильно, но контроллер не обновляет.

+1

Что касается того, почему ваша попытка не сработала: при изменении $ scope вне угловой функции (например, в обратном вызове Firebase) вам необходимо вручную запустить $ digest с $ scope. $ Apply(). Здесь есть довольно хорошее объяснение: http://jimhoskins.com/2012/12/17/angularjs-and-apply.html – bennlich

ответ

9

Try используя регулярные angularFire, и указать тип своего единственного объекта:

app.controller('ctrl', ['$scope', '$timeout', 'angularFire', 
    function($scope, $timeout, angularFire) {  
    var url = 'https://ex.firebaseio.com/stuff'; 
    angularFire(url, $scope, "obj", ""); 
    } 
]); 

Обратите внимание на четвёртом аргументе (»" означает строку, вы можете также использовать BOOLEANS, число, объекты и массивы).

+0

Я получаю 'Ошибка: тип несоответствия' – Harry

+0

Является ли единственный объект по URL-адресу строкой? Вы должны изменить 4-й аргумент как объект того же типа, что и на «https://ex.firebaseio.com/stuff», или то, что вы планируете хранить там. Также не забудьте использовать последнюю версию библиотеки: http://firebase.github.io/angularFire/angularFire.js – Anant

+0

Это объект, поэтому он работал после замены цитат скобками. Этот API не имеет для меня никакого смысла, но я сначала попытался поместить «объект» в качестве последнего аргумента. Есть ли для этого документация? Что вы думаете о стандартизации/разрешении одного и того же api для отдельных объектов и коллекций, поэтому нам не нужно загружать несколько поставщиков (мы надеемся, используя правильную терминологию)? – Harry