对父项ng-init中返回异步的项目进行anguarl1 ng-repeat

时间:2018-05-21 01:21:35

标签: javascript angularjs angularfire

我正努力在父元素“<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

中的collabSongs
    $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;
  });

};

请注意,我正在注销数组,所以我确认它在我得到上述行为的情况下具有所需的数据。

2 个答案:

答案 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返回神奇。我希望听到的任何解释!