AngularJS.Löschen Sie $timeout, wenn Sie das Angular-UI-Modal aufrufen
-
21-12-2019 - |
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:
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