在下面给出的代码中,我们正在调用startTimer
函数,在这里我们使用$interval
触发后端请求,直到获得data.status == "complete"
;状态完成后,我们设置flag = 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,但不取消
答案 0 :(得分:1)
看看:
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];
};
]);
现在,您只分配了一个timer
值,因为它是在控制器级别声明的。但是既然如此,您可能会多次致电$interval
,所以我认为这种方法应该会更好。