AngularJS。调用angular-ui模态时清除$ timeout

时间:2014-01-09 11:22:33

标签: angularjs timeout angular-ui

我在模态控制器中有几个$timeout个表达式

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

我需要在调用模态时清除所有计时器:

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

我该怎么做?

PS抱歉代码格式错误。我不知道为什么,但我不能更好地格式化它。我复制了代码here

2 个答案:

答案 0 :(得分:130)

$timeout服务返回一个Promise对象,可用于取消超时。

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

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

要取消所有待处理的超时,您需要维护一份承诺列表,并在打开模式时取消完整列表。

答案 1 :(得分:2)

你可以让他们通过这样做取消自己...

(function(){
  var timer = $timeout(function(){
    console.log(timer.$$timeoutId);
    $timeout.cancel(timer);
  }, 1000);
})();