在导航上自动关闭模态(单击锚点时)

时间:2013-12-15 09:51:34

标签: angularjs angular-ui angular-ui-bootstrap angular-ui-router

我在我的webapp中使用angular-ui模态。其中一个模型显示导航到应用程序各个部分的许多链接(锚元素)。模态可以像往常一样用modal.dismiss()或modal.close()关闭。但是当有人通过单击锚点导航出来时我需要关闭它吗?通常(不是有角度的)我可以将事件附加到所有锚点击并从那里关闭模态。但是角度似乎有点复杂而且不是很“棱角分明” - 关于如何实现这个的任何想法/指示?

例如:我正在使用angular-ui-router,所以如果可以通过路由解决这也可以解决我的问题。

谢谢!

2 个答案:

答案 0 :(得分:3)

当发生状态更改时,Angular-ui-router会触发事件,因此在您的控制器中,您可以执行以下操作:

$scope.currentModal = undefined;

// whenever a modal opens, ensure it is assigned to the $scope.currentModal. Not clear how
// you are managing your modals at the moment.

// this event-listener closes the current modal (if any)
$scope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams){ 
  if ($scope.currentModal) {
    $scope.currentModal.dismiss();
  }
})

答案 1 :(得分:0)

使用$ modalStack.dismissAll()在状态发生变化时关闭任何模态框。

angular.module('myApp').controller('AppCtrl', ['$scope', '$rootScope', '$modal', '$modalStack',
    function ($scope, $rootScope, $modal, $modalStack) {

        $rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams, options){
            $modalStack.dismissAll();
        });

    }
]);