Angularjs 取消$interval.cancel基于传入$interval.timer的id
在下面给定的代码中,我们调用Angularjs 取消$interval.cancel基于传入$interval.timer的id,angularjs,timer,setinterval,clearinterval,Angularjs,Timer,Setinterval,Clearinterval,在下面给定的代码中,我们调用startTimer函数,在这里我们使用$interval触发对后端的请求,直到我们获得数据。status==“complete”;一旦状态完成,我们设置标志=true,标志将触发手表,它调用$scope.stop函数以使用$interval.cancel取消计时器 但这里出现了一个问题,即,$interval.cancel不知道首先停止哪个计时器 当有多个请求基于id调用计时器时,应取消基于该id完成的计时器 因此,我的问题是如何根据id取消计时器 angular.
startTimer
函数,在这里我们使用$interval
触发对后端的请求,直到我们获得数据。status==“complete”
;一旦状态完成,我们设置标志=true
,标志将触发手表,它调用$scope.stop
函数以使用$interval.cancel取消计时器
但这里出现了一个问题,即,$interval.cancel
不知道首先停止哪个计时器
当有多个请求基于id调用计时器时,应取消基于该id完成的计时器
因此,我的问题是如何根据id取消计时器
angular.module('timerApp', ['timerApp.controllers']);
angular.module('timerApp.controllers', []).controller('timerController', ['$scope', '$interval',
function($scope, $interval) {
var timer;
var time = 10;
$scope.countdown = time;
$scope.startTimer = function(id) {
timer = $interval(function(id) {
$scope.countdown--;
//res is response from my backend
someRestService(id).then(res);
var data = res;
if (data.status = "complete") {
$scope.timerFlag = true;
}
}, 15000);
};
}
$scope.stopTimer = function() {
$interval.cancel(timer);
};
$scope.$watch() {
if ($scope.timerFlag == true) {
$scope.stopTimer();
}
}
]);
情景:
RestapiHit/627
RestapiHit/628
RestapiHit/629
它将调用627请求并完成该过程,然后在即将取消时使用$interval.cance
l调用最新的请求并取消629而不是627查看:
angular.module('timerApp', ['timerApp.controllers']);
angular.module('timerApp.controllers', []).controller('timerController', ['$scope', '$interval',
function($scope, $interval) {
var timer= {} ;
var time = 10;
$scope.countdown = time;
$scope.startTimer = function(id) {
timer[id] = $interval(function(id) {
$scope.countdown--;
//res is response from my backend
someRestService(id).then(res);
var data = res;
if (data.status = "complete") {
$scope.stopTimer(id);
}
}, 15000);
};
}
$scope.stopTimer = function(id) {
$interval.cancel(timer[id]);
delete timer[id];
};
]);
现在,您只需要在控制器级别声明一个计时器值。但是,由于您可能会多次调用$interval
,因此我认为这种方法应该更有效。看看我的答案,我不确定它是否会给出一些错误,但这种方法应该足够了。如果您需要一个工作代码,您可以在plunkr.com上创建一个演示代码并告诉我