Новый для угловой и firebase. Я сталкиваюсь с ошибкой «TypeError: не может вызывать метод« дочерний »неопределенного« на начальной загрузке страницы ». Он не определен, потому что он еще не готов, но я не уверен, как справиться с ситуацией.ТипError: Невозможно вызвать метод 'child' of undefined
Сценарий следующим образом: 1. Журналы пользователя в 2. Firebase проверяет пользователь вошел в систему 3. Пользователь имеет список друзей ребенка 4. Код «друзей» пытается получить детей «друзей», прежде чем Firebase может проверки пользователя
код для входа
$rootScope.userRef = $rootScope.fireRef.child('users');
$rootScope.authClient = new FirebaseAuthClient($rootScope.fireRef, function(error, user) {
if (error) {
// an error occurred while attempting login
console.log(error);
} else if (user) {
// user authenticated with Firebase
$rootScope.userData = $rootScope.userRef.child(user.id);
} else {
// user is logged out
}
});
Позже, в FriendsController, когда пользователь находится на/друзей маршрут
var friendsList = $scope.userData.child('friends');
var promise = angularFire(friendsList.limit(10), $scope, 'friends', {});
Ошибка возникает из списка друзейList, потому что refata userData не готов (я думаю). Навигация к/друзьям из других мест не имеет этой проблемы, только при загрузке страницы. Я ищу решения для обработки сценария. Спасибо.
Редактировать: дополнительные предложения, которые я пробовал, основываясь на предложениях до сих пор от Като и Ананта.
Использование обещание:
var def = $q.defer();
$rootScope.loginPromise = def.promise;
// then in authclient
def.resolve();
Затем в друзья контроллера:
$rootScope.loginPromise.then(function() {
var friendsList = $scope.userData.child('friends');
var promise = angularFire(friendsList.limit(10), $scope, 'friends', {});
});
Это приводит в список друзей не загружается. Интересно, что когда я нажимаю кнопку меню, запускается loginPromise. Это не то, что я ожидал. Любая идея, почему это может быть?
Используйте модель наблюдателя:
$rootScope.broadcast('authenticated') // in user verification
В FriendsController:
$rootScope.$on('authenticated', function() {
var friendsList = $scope.userData.child('friends');
var promise = angularFire(friendsList.limit(10), $scope, 'friends', {});
});
Это работает на странице загрузки, но не, если перейти на страницу, так как там больше не широковещательный событие «подлинности ». Кажется, это вводит другой вопрос. Как перемещаться в/друзья, чтобы загружать нужные данные?
Я также рекомендую посмотреть новую поддержку аутентификации, добавленную в angularFire, есть обзор того, как ее использовать здесь: https://groups.google.com/d/msg/firebase-talk/D6wgBgUtK94/AygqI4oJ7b4J – Anant
Привет @ Като, спасибо за предложения. Я столкнулся с некоторыми проблемами с обещаниями и использованием модели наблюдателя и отредактировал свой ответ с моими результатами. Возможно, вы могли бы помочь мне с ними. Я также не смог получить аутентификацию angularFire, но я буду продолжать возиться, поскольку я многому учусь. Благодарю. – landland
@ Обязательно следуя инструкциям в потоке группы google, я смог получить аутентификацию. Спасибо за инструкции, они были очень полезны. – landland