如何让ng-click函数等待jQuery脚本在执行之前完成?

时间:2015-02-07 20:21:25

标签: jquery angularjs timeout wait

在对Flickr的API进行REST调用之前,我需要清除ul当前项的列表,然后再用20个项填充它。目前这些是同时运行的,这导致列表保留0项,尽管抓住了20个新项目。

REST调用当前位于我的一个服务中。根据我的搜索,我发现了两种可能的解决方案:$timeout$viewContentLoaded,或者可能将它们合并为一个解决方案。但是,在我的情况下,我无法弄清楚如何实现它以使其正常工作。

在其他任何事情之前执行的脚本:

JQuery代码:

$('#fav-tags-list').on('click', 'li', function() {

    $('#images-list').children('li').remove();
    $('#fav-tags-list li').removeClass('selected');
    $(this).addClass('selected');
});

ng-click(getImages)调用的函数:

flickrApp.service('shared', function() {
    var imageGroup = [];

    return {
        getImages: function(tag) {

            if (tag === false) {
                var options = {
                    format: 'json',
                    tagmode: 'ANY'
                }
            }
            else {
                var options = {
                    format: 'json',
                    tags: tag,
                    tagmode: 'ANY'
                }
            }

            $.getJSON('https://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?', options, function(data) {

                $.each(data.items, function(i, image) {

                    imageGroup.push(data.items[i]);
                });
            });

            return imageGroup;
        }
    };
});

ng-click的标记(剥离属性):

<ul id="fav-tags-list">
    <li ng-repeat="tag in tagsList" ng-bind="tag"
        ng-click="shared.getImages(tag)"></li>
</ul>

编辑:根据我的要求,我如何使用该服务:

flickrApp.controller('flickrCtrl', ['$scope', '$firebase', 'shared', function($scope, $firebase, shared) {

    $scope.shared = shared;

    //Get a set of images on pageload
    $scope.imageGroup = shared.getImages(false);

}]);

我甚至不确定这是我在这里寻找的东西,所以我很欣赏一些指导。

1 个答案:

答案 0 :(得分:1)

如果您在调用函数时试图延迟,可以执行以下操作:

<html>
<button ng-click="do()"></button>
</html>

<script>

    $scope.do = function() {
        $timeout( function(){
             //your code here
        },10000, true );
    }
<script>

或者更有效的方法来做同样的事情就是用timeout()

来包装它