我正努力在父元素“<ng-repeat>
中返回的项目上ng-init
。我觉得这个数组的ng-init
初始化的异步性质导致ng-repeat
无法呈现。这是我的HTML /角度设置
<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调用函数,它填充父代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;
});
};
请注意,我正在注销数组,所以我确认它在我得到上述行为的情况下具有所需的数据。
答案 0 :(得分:1)
collabSongs
设置为getSongsFromCollab
的返回值,这不是回调函数返回songsRef.once
的值。您正在尝试同步设置从异步函数返回的值。 $ firebaseArray同步返回一个后来填充了数据的数组。
答案 1 :(得分:0)
我想我可以做以下事情
$scope.getSongsFromCollab = function(collaboration) {
var songsRef = new Firebase(FBURL + 'collaboration_songs').child(collaboration).child('songs');
return $firebaseArray(songsRef);
};
angularfire为绑定异步对象从带有角度的firebased返回神奇。我希望听到的任何解释!