Ik heb verschillende $timeout
-expressies in Modal-controller
App.controller('ModalCtrl', function ($scope, $timeout) {
for (var i = 0; i < 10; i++) {
(function () {
var timer = $timeout(function () {
console.log('timer')
}, 1000);
})()
}
})
Ik moet alle timers wissen bij het aanroepen van de modal:
App.controller('MainCtrl', function ($scope, $modal, $timeout) {
$scope.showMap = function () {
var modal = $modal.open({
templateUrl: 'modalap.html',
controller: 'modalCtrl',
})
modal.result.then(function () { //fires when modal is resolving
}, function () { //fires when modal is invoking
});
} })
Hoe kan ik dat doen?
PS Sorry voor de slechte opmaak van de code. Ik weet niet waarom, maar ik kan het niet beter formatteren. Ik dupliceerde code hier:
Antwoord 1, autoriteit 100%
De $timeout
-service retourneert een Promise
-object dat kan worden gebruikt om de time-out te annuleren.
// Start a timeout
var promise = $timeout(function() {}, 1000);
// Stop the pending timeout
$timeout.cancel(promise);
Als u alle in behandeling zijnde time-outs wilt annuleren, moet u een lijst met beloften bijhouden en de volledige lijst annuleren wanneer u de modal opent.
Antwoord 2
Je kunt ze ook zichzelf laten annuleren door dit te doen…
(function(){
var timer = $timeout(function(){
console.log(timer.$$timeoutId);
$timeout.cancel(timer);
}, 1000);
})();