setTimout中的setInterval仅在angularjs控制器中触发一次

时间:2016-01-18 13:35:32

标签: javascript angularjs

正如标题所述,这似乎只会触发一次。我需要它不断运行。

我的控制器内的代码:

    setTimeout(function () {
        $scope.test();
        console.log('starting test');
        // check and update dates every minute (hopefully language will be in the bridge)
        $scope.testInterval = setInterval($scope.test(), 1000);
    }, 2000);

    $scope.test = function () {
        console.log('test');
    };

控制台输出:

test
starting test
test

然后什么都没有。停止工作。

3 个答案:

答案 0 :(得分:1)

在setinterval行中调用scope .test()。您需要传递函数而不是函数的结果。

$scope.testInterval = setInterval($scope.test(), 1000);

变为

$scope.testInterval = setInterval($scope.test, 1000);

此外,由于setInterval在设置间隔之前第一次不需要额外的$ scope.test()时立即触发。

答案 1 :(得分:1)

由于您正在调用该函数,因此您应该使用

$scope.testInterval = setInterval($scope.test, 1000);

你应该注意的区别是$ scope.test没有括号(),因为你想调用这个函数而不是这个函数的执行返回值。

如果您已经编写$scope.test(),它将返回undefined,并且您的间隔将不会运行(因为您的setInterval函数参数未定义)。如果你写$scope.test,你的间隔会调用测试函数。

答案 2 :(得分:0)

使用$interval代替setInterval

var interval = $interval(function() {
  console.log('say hello');
}, 1000);

如果你想阻止它:

$interval.cancel(interval);