代码之家  ›  专栏  ›  技术社区  ›  Thalatta

angual1 ng对父级ng init中返回的异步项重复

  •  0
  • Thalatta  · 技术社区  · 8 年前

    我正在努力 <ng-repeat> 在父元素中返回的项上' ng-init . 我觉得 ng初始化 初始化此数组将导致 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调用函数,用于填充父级的collabsong ng初始化

        $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 回复  |  直到 8 年前
        1
  •  1
  •   jrasm91    8 年前

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

        2
  •  0
  •   Thalatta    8 年前

    我想我可以做以下的事情

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

    AngularFire通过Angular绑定从FireBased返回的异步对象。我想听任何解释!