Frage

Ich habe mehrere $timeout Ausdrücke im modalen Controller

App.controller('ModalCtrl', function ($scope, $timeout) {
    for (var i = 0; i < 10; i++) {
        (function () {
            var timer = $timeout(function () {
                console.log('timer')
            }, 1000);
        })()
    }
})

Ich muss alle Timer löschen, wenn ich das Modal aufrufe:

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

Wie kann ich das machen?

PS Entschuldigung für die schlechte Codeformatierung.Ich weiß nicht warum, aber ich kann es nicht besser formatieren.Ich habe den Code dupliziert Hier:

War es hilfreich?

Lösung

Der $timeout Der Dienst gibt a zurück Promise Objekt, mit dem der Timeout abgebrochen werden kann.

// Start a timeout
var promise = $timeout(function() {}, 1000);

// Stop the pending timeout
$timeout.cancel(promise);

Um alle ausstehenden Zeitüberschreitungen abzubrechen, müssen Sie eine Liste mit Versprechen führen und die vollständige Liste abbrechen, wenn Sie das Modal öffnen.

Andere Tipps

Sie können sie auf diese Weise auch selbst kündigen lassen ...

(function(){
  var timer = $timeout(function(){
    console.log(timer.$$timeoutId);
    $timeout.cancel(timer);
  }, 1000);
})();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top