0

在 ng-repeat div 标签之间,

我有div.cover_container.fetched显示使用获取的数据的元素$http.get

我想在这些元素上附加事件处理程序,但我不能这样做,因为有时它们还没有完成加载。

负责附加事件处理程序的函数是activateGear

即使我将activateGear成功部分放在里面,它activateGear也并不总是有效,因为div.cover_container.fetched在执行函数时不存在。

$http.get(url).success(function(data, status, headers, config) {
      var items = data.stories;
      this.maxLimit = data.paging.count;
      for (var i = 0; i < items.length; i++) {
        if (this.items.length < this.maxLimit) {
          this.items.push(items[i]);
        }
      }
      activateGear();

activateGear将事件处理程序附加到重复元素上的​​函数。

如何在 angularjs 1.0.8 中实现上述目标?

更新:

我设法实现了使用setInterval作为解决方法的效果。

希望没有这样的解决方法我能得到我想要的。

  MyWorks.prototype.nextPage = function() {
    if (this.busy) return;
    this.busy = true;
    var url = "/my_works?page=" + this.page + "&top=" + this.perPage + "&callback=JSON_CALLBACK";
    $http.defaults.headers.get = { 'Accept' : 'application/json', 'Content-Type' : 'application/json' };
    $http.get(url).success(function(data, status, headers, config) {
      var items = data.stories;
      this.maxLimit = data.paging.count;
      for (var i = 0; i < items.length; i++) {
        if (this.items.length < this.maxLimit) {
          this.items.push(items[i]);
        }
      }

      this.page = parseInt(this.items.length / this.perPage) + 1;

      var currentMyWorks = this;
      var theIntervalId = setInterval(function() {
        if (currentMyWorks.busy == false) {
          activateGear();
          clearInterval(theIntervalId);
        }
      }, 300);
      this.busy = false;
4

1 回答 1

0

最好的方法是让您分离关注点。

将您的视图变成一个指令,您可以在其中利用该link函数对已完成渲染的元素进行操作。

$http是您将在服务中使用的提供程序,因此这不是 DOM 操作的地方,如果您试图在控制器中使用它也是如此,这是一个更糟糕的主意。

对于角指令文档阅读这里和一个很好的学习资源:egghead.io

于 2013-10-31T10:24:31.523 回答