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