未捕获的ReferenceError:未定义项目

时间:2015-02-17 08:50:10

标签: javascript angularjs

我试图在AngularJS服务中每隔5秒将一个项目推送到一个数组,但我仍然没有定义'项目未定义'在动态添加1项后......

我已经玩了这个简单的代码一个多小时了,我确定它有点傻但我无法弄明白。 :/

app.service('ItemService', function() {

  var items = [9000];

  this.addItem = function () {
    items.push(Math.random());
  }

  setInterval(this.addItem(), 5000);

  return {
    get: function() {
      return items;
    }
  }
});

Plnkr:http://plnkr.co/edit/EVFUww7dfUAJzQqth7mx

4 个答案:

答案 0 :(得分:3)

您正在调用addItem()并将其返回值传递给setInterval() - 而不是函数本身。

应该是:

setInterval(this.addItem, 5000); // no () after addItem

答案 1 :(得分:3)

您正在使用角色,因此您不应该使用setInterval,而是使用Angular提供的$interval服务。

加上对@techfoobar的正确观察,将导致您正在寻找的正确行为:

app.service('ItemService', ['$interval', function($interval) {

  var items = [9000];

  this.addItem = function () {
    items.push(Math.random());
  }

  $interval(this.addItem, 5000); 

  return {
    get: function() {
      return items;
    }
  }
}]);

Working Plunker

答案 2 :(得分:0)

尝试使用$ interval()服务而不是setInterval

$interval($scope.item, "time_interval"); 

答案 3 :(得分:0)

时间函数如window.setInterval,在angularjs中包含在$ interval(https://docs.angularjs.org/api/ng/service/ $ interval)中。 Angular管理间隔函数,就像一个承诺,以确保更多地控制计时器。