Javascript 这个$interval有什么问题?仅在页面加载时激发

Javascript 这个$interval有什么问题?仅在页面加载时激发,javascript,angularjs,Javascript,Angularjs,这是对未来功能的一种测试,但基本上我只想检查一下是否每秒做一次,持续30秒。如果完成了,请停止计时器并打开一个变量,以便页面上的某些内容消失,否则30秒后会告诉用户某些内容需要一些时间 正如标题所述,当页面加载时,间隔中的控制台日志只发生一次,然后不再发生。我需要以某种方式或其他方式启动计时器吗?尝试类似的方法 setTimeout(function(){ userIsSetup = true; console.log('This happened!'); }, 4000);

这是对未来功能的一种测试,但基本上我只想检查一下是否每秒做一次,持续30秒。如果完成了,请停止计时器并打开一个变量,以便页面上的某些内容消失,否则30秒后会告诉用户某些内容需要一些时间


正如标题所述,当页面加载时,间隔中的控制台日志只发生一次,然后不再发生。我需要以某种方式或其他方式启动计时器吗?

尝试类似的方法

setTimeout(function(){
    userIsSetup = true;
    console.log('This happened!');
}, 4000);

$interval(function(){
    if(userIsSetup){
        $scope.received = true;
        $interval.cancel(); // Can pass a promise into this as well
    }
    console.log('A second has passed');
}, 1000, 30);
对于以角度表示的$interval

 $scope.userIsSetup = false;
 $interval = setInterval(function(){
 $scope.check();
console.log('This happened!');
},2000);


$scope.check = function(){
        if($scope.userIsSetup){
            $scope.received = true;
            $interval.cancel(); 
        }
        console.log('2 second has passed');

   };
app.controller('MainCtrl',函数($scope,$interval){
$scope.totalTimepassed=0;
$scope.callAtInterval=函数(){
如果($scope.totalTimepassed<9)
{
$scope.totalTimepassed=$scope.totalTimepassed+1;
console.log($scope.totalTimepassed+“seconds passed”);
}
其他的
{  
$interval.cancel(interval);
console.log(“10秒过去”);
}
}
var interval=$interval($scope.callAtInterval,1000);
});

因为您使用的是
$interval
,所以您也可以使用
$timeout
顺便说一句。否则,您是否可以检查变量
userIsSetup的声明位置以及是否忘记将其初始化为
false
?这似乎有效。您知道为什么我的原始代码没有这样做吗?因为您没有将setTimeout计时器句柄分配给$interval,所以应该通过$interval=setTimeout()来分配它。实际上,我刚才注意到的一个问题是,我现在使用的是setInterval,而不是angular的$interval,这意味着dom上的内容不会用$interval更新(即$scope.received变量不会更新页面上的任何内容)。是的,对于angular$timeout,我也更新了代码。嗯……你发布的$interval代码似乎对我不起作用。我的应用程序中肯定有什么地方发生了问题,但这是我在整个应用程序中唯一一次接触到$interval。如果我改用setInterval,有没有办法像angular那样更新dom,以便r$scope.received是否反映在视图上?
app.controller('MainCtrl', function($scope,$interval) {


$scope.totalTimepassed = 0;


$scope.callAtInterval =  function () {

if($scope.totalTimepassed < 9)
{
$scope.totalTimepassed = $scope.totalTimepassed +1;
console.log($scope.totalTimepassed +" seconds passed");
}
else
{  
   $interval.cancel(interval);
   console.log("10 seconds passed");
}

}

var interval =  $interval($scope.callAtInterval, 1000);



});