AngularJS. Wis $timeout bij het aanroepen van angular-ui modal

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);
})();

Other episodes