Я запрашиваю некоторые данные из Firebase, используя AngularFire, как показано ниже.
$rootScope.userTags = $firebase($fbCurrent.child('tags')).$asArray();
На входе эти данные следующими способами я получаю выходы, как на изображении ниже. Так,
console.log($rootScope.userTags);
console.log($rootScope.userTags[0]);
$rootScope.userTags.$loaded().then(function() {
console.log($rootScope.userTags[0]);
});
В первом заявлении журнала вы можете заметить $FirebaseArray
объект с пятью элементами. Во втором заявлении журнала, когда я пытаюсь получить доступ к одному из элементов, я получаю undefined
, хотя вы можете четко видеть эти элементы в массиве un $loaded
. Теперь в последнем операторе журнала вызов $loaded
позволяет мне обращаться к этим элементам без каких-либо проблем.
Почему он ведет себя так? И есть ли способ доступа к этим элементам, поскольку они уже существуют, не вызывая $loaded
в массиве?
Как правило, просто настройте такую директиву, как 'ng-repeat', чтобы напечатать содержимое в вашем представлении, отбросить объект в $ scope и позволить Angular беспокоиться о том, когда он загружается. Это своего рода точка синхронизированных объектов и привязок. Если вы хотите манипулировать данными в своем контроллере, чего вы, вероятно, не должны делать, то вам нужно дождаться его загрузки. Если вы пытаетесь преобразовать данные с сервера, используйте $ extendFactory, как описано в документах, и снова, не беспокойтесь о том, когда он загружается. – Kato