Я стараюсь иметь <ng-repeat>
для элементов, которые возвращаются в родительских элементах 'ng-init
.Я чувствую, что асинхронная природа инициализации ng-init
этого массива приводит к тому, что ng-repeat
не рендерится.Вот мои настройки HTML / angular
<span ng-click=\"showArtist(song.artist.key)\" class=\"song_alias\"
ng-init=\"collabSongs = getSongsFromCollab(song.collaboration_id); \" >
{{song.artist.alias}}
<span ng-repeat=\"songItem in collabSongs\"
ng-init=\"songCollabItem = songForKey(songItem); index = $index\">
{{index != (collabSongs.length - 1) ? songCollabItem.artist.alias : 'goo'}}
</span>
</span>
, однако, хотя я выхожу из системы, что getSongsFromCollab()
правильно возвращает массив ненулевых элементов (2), хотя и асинхронно, я не видел внутреннее <span>
когда-либо визуализируется в dom и вместо этого просто смотрите:
<!-- ngRepeat: songItem in collabSongs -->
, для справки здесь есть вызывающая функция firebase, которая заполняет collabSongs в родительской ng-init
$scope.getSongsFromCollab = function(collaboration) {
console.log('getSongs' , collaboration);
var songsRef = new Firebase(FBURL + 'collaboration_songs').child(collaboration).child('songs');
songsRef.once("value", function(data){
var val = data.val();
var array_of_songs = [];
var keys = Object.keys(val);
for (var i= 0; i<keys.length; i++){
array_of_songs.push(val[keys[i]]);
}
console.log(array_of_songs);
return array_of_songs;
});
};
Обратите внимание, что яЯ выхожу из массива, поэтому я подтвердил, что у него есть нужные данные в случае, когда я получаю описанное выше поведение.