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>

但是当我尝试在里面阅读我生成的代码时

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

使用 jquery 我不能(它还不存在,但我试图在 $http 方法的“成功”回调中做到这一点)。当我不使用 $http 并将 jsqon 硬编码在我的 Player 函数中时,这非常有效。

谢谢

4

1 回答 1

0

我建议你像这样使用 $timeout:

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

这基本上会让你的调用只有在 Angular 完成生成新的 DOM 结构后才会发生。还必须像 $http 一样将 $timeout 注入控制器,因此您的控制器声明应该像这样:

function Player($scope, $http, $timeout) {
于 2014-10-02T23:50:06.083 回答