anguarl1 ng-repeat 在 parents ng-init 中异步返回的项目

anguarl1 ng-repeat on items returned async in parents ng-init

我正在努力对 parent 元素 ng-init 中返回的项目设置 <ng-repeat>。我觉得这个数组的 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 -->

此处供参考的是在 parent 的 ng-init

中填充 collabSongs 的 firebase 调用函数
    $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;
  });

};

请注意,我正在注销数组,因此我已确认它在出现上述行为时具有所需的数据。

我想我可以做到以下几点

   $scope.getSongsFromCollab = function(collaboration) {
    var songsRef =  new Firebase(FBURL + 'collaboration_songs').child(collaboration).child('songs');
    return $firebaseArray(songsRef);
};

angularfire 可以神奇地将来自 firebased 的异步对象 return 与 angular 绑定。我很想听听任何解释!

collabSongs设置为getSongsFromCollab的return值,不是songsRef.once回调函数的return值。您正在尝试从异步函数同步设置一个值 returned。 $firebaseArray 同步 returns 一个稍后用数据填充的数组。