2013-06-24 97 views
0

我有下一個問題: 我試圖通過使用$ http方法發出請求來訪問和修改dom生成的html的角度。

例子:

function Player($scope, $http) { 

    var $player = $(".player"); 
    var _this = this; 
    var playing = false; 
    console.log('pepe'); 
    // Getting Songs 
    $http.get('http://www.undert.com/components/player/js/songs.json').success(function (data) { 

     $scope.songs = data.songs; 
     console.log($player.find('li').length); 

    }); 
} 

和HTML是:

<div class="player" ng-controller="Player"> 
    <ul class="playlist"> 
     <li ng-repeat="song in songs"> 
      <div class="album-art"> 
       <div ng-show="!song.image"> 
        <img src="http://undert.com/components/player/img/album_default.jpg" alt="{song.band}" /> 
       </div> 
       <div ng-show="song.image"> 
        <img src="http://undert.com/artists/{song.namespace}/images/albums/{song.image}" alt="{song.album}" /> 
       </div> 
      </div> <a class="reproduction"></a> 
<a class="close"></a> 
<span class="title">{song.title}</span> 
<span class="artist">{song.artist}</span> 

      <audio src="http://undert.com/artists/{song.namespace}/music/{song.song}"></audio> 
     </li> 
    </ul> 
    <div class="buttons"> 
     <div class="play"></div> 
     <div class="prev"></div> 
     <div class="next"></div> 
    </div> 
</div> 

但是當我嘗試使用jQuery讀取裏面

<li ng-repeat="song in songs"> 

我生成的代碼我不能(它不存在但是,即時通訊嘗試在$ http方法的「成功」回調中執行此操作)。 這個工作完美時,我不使用$ http,並使我的播放器功能硬編碼jsqon。

感謝

+1

嘗試放置$ scope。$ apply()在$ scope.songs = data.songs之後; –

+0

@Ajaybeniwal我很確定'Player'是這裏的控制器,這意味着你不必添加'$ scope。$ apply()' - 你已經處於摘要循環中了... – callmekatootie

+0

你能告訴我們嗎你需要'ng-repeat'指令結構中的代碼嗎?也許你不需要jQuery ... – callmekatootie

回答

0

我建議你使用$超時這樣的:

$timeout(function(){ console.log($player.find('li').length); }); 

這基本上使您的通話發生一次角已完成產生新的DOM結構。 $ timeout也必須注入到控制器中,就像$ http一樣,您的控制器聲明應該如下所示:

function Player($scope, $http, $timeout) {