2015-02-07 86 views
2

我需要清除ul当前项目列表,然后再调用Flickr的API,然后再填充20个项目。目前这些正在同时运行,尽管抓住了20个新物品,但这个清单仍然保留了0个物品。如何让ng-click函数等待jQuery脚本在执行前完成?

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); 

}]); 

我甚至不能确定这就是我正在寻找在这里,所以我会很感激一些指导。

+0

不要在角码内使用jquery ..使用'$ http.get'或'$ resource'..that将创建一个摘要循环的瓶颈运行 – 2015-02-07 20:28:49

+0

完全忘记了$ http.get .. will更改和更新问题。 – Chrillewoodz 2015-02-07 20:31:49

+0

这是错误的代码里面的服务..可以请你添加你的控制器代码..我想看看你是如何使用服务..看起来像服务没有返回任何承诺.. – 2015-02-07 20:36:29

回答

1

,如果你想使一个延时,当一个函数被调用你可以做这样的事情:

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

<script> 

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

或更有效的方式做同样的事情是刚刚与超时包起来( )

相关问题