9

リンクからブートストラップ モーダル ダイアログを呼び出しています。

ダイアログがポップアップしたときに角度コントローラーでタイマーを開始したい。angularコントローラーでダイアログオープンイベントを検出してタイマーを開始するにはどうすればよいですか?

このようなスコープでタイマーを開始すると、

app.controller('myctrl',
    ['$scope', '$window', '$timeout', 'svc',
    function ($scope, $window, $timeout,  svc) {

        $scope.countdown = 10;

        $scope.runCounter = function () {
            $scope.countdown -= 1;
            if ($scope.countdown > 0)
                $timeout($scope.runCounter, 60000);
       }
        $scope.runCounter();
    }]);

アプリケーションの起動時にタイマーが開始されます。ダイアログが開いたときにのみタイマーを開始したい。ありがとう。

4

4 に答える 4

78

これをチェックしてください。

var modalInstance = $modal.open({...});
modalInstance.opened.then(function() {
    alert("OPENED!");
});

は、他のプロパティの中で、上記のように使用される promise$modal.open()を含むオブジェクトを返します。opened

于 2013-11-15T12:47:30.070 に答える
4

http://angular-ui.github.io/bootstrap/のモーダルを使用していると仮定します。

よく見ると、ダイアログが開かれたときに解決される promise をコンポーネントが公開していることがわかります。これは、使用する必要があるものです。モーダルが作成されたコントローラーで、次のようなことができます。

$scope.runCounter = function () {
  $scope.countdown -= 1;
  if ($scope.countdown > 0)
    $timeout($scope.runCounter, 60000);
}

//Creating the dialog
var modalInstance = $modal.open({
  templateUrl: 'myModalContent.html',
  controller: ModalInstanceCtrl
  }
});

//Add a function for when the dialog is opened
modalInstance.opened.then(function () {
  $scope.runCounter 
});

ここで作業プランカーを参照してください

于 2013-11-15T12:48:29.613 に答える
0

 var modalInstance = $modal.open({
                templateUrl: '../augustine_app/templates/program_purchase_popup.html',
                backdrop: 'static',
                controller: function ($scope, $modalInstance) {
                    $scope.cancel = function () {
                        $modalInstance.dismiss('cancel');
                    };
                }
            });

            

            if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {
                modalInstance.opened.then(function () {
                    var modal;
                    var getModalInterval = function () {
                        modal = document.getElementsByClassName('modal')[0];
                        if (modal) {
                            clearInterval(getModal);
                            modal.style.marginTop = window.screenTop + 'px';
                            modal.style.height = 'auto';
                            modal.style.position = 'absolute';
                            modal.style.overflow = 'visible';
                        }
                    };
                    modal = document.getElementsByClassName('modal')[0];
                    if (!modal) {
                        var getModal = setInterval(getModalInterval, 2000);
                    }
                });
            }
        };

残念ながら、おかしなモーダルが実際に DOM にある前に open.then(func) が実行されます。したがって、setInterval です。

jQuery 以外の角度コードを次に示します。

于 2015-07-08T20:37:57.597 に答える