2013-06-24 4 views
0

У меня есть следующая проблема: Я пытаюсь получить доступ к и сгенерированным html-выражением с помощью углового после того, как сделаю запрос, используя метод $ http.

Пример:

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> 

Но когда я пытаюсь прочитать мой сгенерированный код внутри

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

с помощью JQuery я не могу (оно не существует но я пытаюсь сделать это внутри «успешного» обратного вызова по методу $ http). Эта работа отлично, когда я не использую $ http и не могу запретить jsqon внутри моей функции Player.

благодаря

+1

попытки поставить $ объема $ применить() после того, как $ 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. Также $ тайм-аут, который будет введен в контроллере так же, как $ HTTP так что ваша декларация контроллера должна Локк как:

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