有没有办法拦截 BootstapUI 的 $uibModal dismissed 事件?
Is there a way to intercept BootstapUI's $uibModal dismissed event?
我在 Angular 中使用 Bootstrap UI (https://angular-ui.github.io/bootstrap/) 中的模态组件来呈现模态,并且在关闭时我希望能够重定向到另一个状态,或者至少调用一个函数。
问题是我可以拦截 close
事件,但是每当我用户按下 Esc
时,模态就会消失,我找不到任何关于捕获 dismiss
事件的文档,或者为返回的承诺分配一个函数。
代码如下:
var modalInstance = $uibModal.open({
templateUrl: 'a-template.html',
controller: 'AnotherCtrl',
controllerAs: 'modal',
backdrop: false,
size: 'lg'
});
// I am able to catch this whenever the user exits the modal in an
// orthodox fashion. Doesn't happen when he presses Esc button.
modalInstance.closed = function () {
$state.go(homeState);
};
或者,另一种适合我的业务案例的解决方案是不允许用户关闭模式。并在模态控制器中发生事件时自己关闭它。到目前为止我还没有找到这方面的功能。
在与模式关联的控制器中(“AnotherCtrl”或“modal”适合您),您可以将 $scope.$on()
与 'modal.closing'
事件一起使用。
示例:
var modalInstance = $uibModal.open({
templateUrl: 'a-template.html',
controller: ['$scope', function($scope){
$scope.$on('modal.closing', function(event, reason, closed){
if('condition for not closing')
event.preventDefault(); //You can use this to prevent the modal from closing
else
window.location = "https://www.youtube.com/watch?v=dQw4w9WgXcQ";
});
}],
controllerAs: 'modal',
backdrop: false,
size: 'lg'
});
我在 Angular 中使用 Bootstrap UI (https://angular-ui.github.io/bootstrap/) 中的模态组件来呈现模态,并且在关闭时我希望能够重定向到另一个状态,或者至少调用一个函数。
问题是我可以拦截 close
事件,但是每当我用户按下 Esc
时,模态就会消失,我找不到任何关于捕获 dismiss
事件的文档,或者为返回的承诺分配一个函数。
代码如下:
var modalInstance = $uibModal.open({
templateUrl: 'a-template.html',
controller: 'AnotherCtrl',
controllerAs: 'modal',
backdrop: false,
size: 'lg'
});
// I am able to catch this whenever the user exits the modal in an
// orthodox fashion. Doesn't happen when he presses Esc button.
modalInstance.closed = function () {
$state.go(homeState);
};
或者,另一种适合我的业务案例的解决方案是不允许用户关闭模式。并在模态控制器中发生事件时自己关闭它。到目前为止我还没有找到这方面的功能。
在与模式关联的控制器中(“AnotherCtrl”或“modal”适合您),您可以将 $scope.$on()
与 'modal.closing'
事件一起使用。
示例:
var modalInstance = $uibModal.open({
templateUrl: 'a-template.html',
controller: ['$scope', function($scope){
$scope.$on('modal.closing', function(event, reason, closed){
if('condition for not closing')
event.preventDefault(); //You can use this to prevent the modal from closing
else
window.location = "https://www.youtube.com/watch?v=dQw4w9WgXcQ";
});
}],
controllerAs: 'modal',
backdrop: false,
size: 'lg'
});