У меня нет проблем при использовании неявных обновлений (angelFire). Однако мне нужно, чтобы некоторые из моих данных использовали явное обновление. Поэтому я применил angelFireCollection
в том же репертуаре, что и раньше, но, несмотря на то, что console.log явно сказал, что чтение было предоставлено, и попробовал его с обоими onloadcallback
и без него, я не получаю данные непосредственно в назначенной переменной И один раз обратный вызов срабатывает, я получаю странно выглядящий объект, который содержит данные, но не в ожидаемой форме. Моя переменная области заканчивается пустой коллекцией. Никогда не заселяется. Вот код:angularFireCollection не возвращает никаких данных
var streamController = function ($rootScope, $scope, $log, $location, angularFireCollection, profileService) {
//Wait for firebaseLogin...
$rootScope.$watch('firebaseAuth', init);
function init() {
if ($rootScope.firebaseAuth == false) {
return
};
var refUsers = new Firebase($rootScope.FBURL+'/users/'+$rootScope.uid);
$scope.profile = angularFireCollection(refUsers, function onload(snapshot) {
console.log(snapshot)
});
};
};
myApp.gwWebApp.controller('StreamController', ['$rootScope', '$scope', '$log', '$location', 'angularFireCollection', 'profileService',
streamController]);
}());
Вот что console.log выглядит (то есть, то, что снимок выглядит):
>snapshot
T {z: R, bc: J, V: function, val: function, xd: function…}
Вот раньше сообщение до того, как снимок был возвращен:
Firebase Login Succeeded! fbLoginController.js:16
FIREBASE: Attempt to read /users/529ccc5d1946a93656320b0a with auth={"username":"[email protected]","id":"529ccc5d1946a93656320b0a"} firebase.js:76
FIREBASE: /: "auth.username == 'admin'" firebase.js:76
FIREBASE: => false firebase.js:76
FIREBASE: /users firebase.js:76
FIREBASE: /users/529ccc5d1946a93656320b0a: "auth.id == $user" firebase.js:76
FIREBASE: => true firebase.js:76
FIREBASE:
FIREBASE: Read was allowed.
и, наконец, требуемое связывание, которое заканчивается пустым массивом: снова с консоли:
$ scope.profile []
Кто-нибудь знает, что я мог делать неправильно? Это похоже на 5 строк кода. Разочарование.
Я положил стопы в заводской функции angelFireCollection
и может видеть, что данные добавляются в коллекцию в обратных вызовах внутри этой функции, но моя привязанная переменная никогда не обновляется.
ОБНОВЛЕНИЕ ОК, экспериментируя с plnkr. Кажется, что angularFireCollection
ОЖИДАЕТ ваш возврат СПИСОК элементов. Снимок возвращается правильно, если вы проверите snapshot.val()
, это будет какая-либо структура объекта, хранящаяся в firebase. ЕСЛИ вы используете angularFireCollection
, он действительно связывается с переменной HOWEVER, превращая объект, не являющийся списком, в искаженный беспорядок, и вы не можете получить доступ к объекту, пользователю обычного оператора точки. Это либо ошибка, либо это серьезное ограничение angularFireCollection
, которое заставит меня переоценить, насколько легко я могу использовать firebase в качестве бэкэнд. Я не могу поделиться своим plnkr, потому что он обращается к непубличным данным, но завтра, если у меня будет время, я создам публичную firebase с хранилищем объектов и продемонстрирую.
Вы можете следить за v2. http://angularfire.com/documentationv2.html В настоящее время он находится в стадии rc, но он чувствует себя более прозрачным.Он всегда возвращает объекты и имеет встроенный фильтр orderByPriority для создания массивов для таких вещей, как ng-repeat. – Bro