我最近在我们的应用程序中将所有模态指令切换到Angular-ui-Bootstrap模式。好多了,但是遇到了一种新的模式,它在鼠标上关闭而不是取消点击。
this.leaveTag = (tag) => {
TagHover.off();
};
this.hoverTag = (tag) => {
TagHover.display();
};
上面是调用TagHover Factory内部函数的视图逻辑。
下面是Factory,TagHover.display与我们的其他模态一样正常,但我正在尝试用leaveTag > TagHover.off
调用modal.close。到目前为止还没有工作。
我的问题是如何在TagHoverController中调用close函数,或者在我的tagsPanel组件中调用$ uibModal上的close
- > TagsHover工厂? (不使用$ scope或$ rootScope事件)
我不是要尝试从TagHover Ctrl范围内调用close/cancel
,而是尝试从父范围调用close
。
const TagHover = angular.module('tickertags-shared')
.controller('TagHoverController', TagHoverController)
.factory('TagHover', factory);
TagHoverController.$inject = [
'TagHover'];
function TagHoverController(
TagHover) {
this.$onInit = () => {
console.log('TagHover onInit')
};
this.cancel = () => this.$close();
}
factory.$inject = ['$uibModal'];
function factory($uibModal) {
const display = () => {
const modal = $uibModal.open({
controllerAs: 'tghov',
bindToController:true,
templateUrl: 'tags/tag_hover.html',
windowClass: 'dash-modal',
resolve: {},
controller: 'TagHoverController'
});
};
const off = () => {
$uibModal.close({});
};
return {
display,
off
}
}
module.exports = TagHover;
以下是文档https://angular-ui.github.io/bootstrap/#/modal
open方法返回一个模态实例,一个具有以下属性的对象:
close(result)(类型:function) - 可用于关闭模态,传递结果。
我还注销了$uibModal
对象,我只看到一个打开的函数,没有关闭:(
答案 0 :(得分:9)
在您的情况下,您正在使用Factory进行动态模态。所以你可以用以下两种方式使用$uibModalStack
。
$uibModalStack.dismissAll(); // dismiss all opened modal
$uibModalStack.dismiss(openedModal.key); // dismiss modal by key
var top = $uibModalStack.getTop();
if (top) {
$uibModalStack.dismiss(top.key);
}
在路由器更改期间从动态模态中解除模态非常重要。
一般来说,$uibModal
将有助于打开模态,然后每个模态都是$uibModalInstance
,如果你想在模态中关闭模态。
angular.module('myPage')
.controller('PageController', ['$uibModal',
function($uibModal) {
function onModalLink() {
$uibModal.open({
templateUrl: 'app/modals/paymentTpl.html',
controller: 'PaymentModalController as vm',
windowClass: 'generalModal myModal'
});
}
}
]);
angular.module('paymentModal')
.controller('PaymentModalController', [
'$uibModalInstance',
function ChangeRepaymentController($uibModalInstance) {
function onCancel() {
$uibModalInstance.close(repaymentPercentage);
}
}
]);
modalInstance
- 模态实例。这与使用控制器时发现的$ uibModalInstance注入相同。
WIKI参考:https://github.com/angular-ui/bootstrap/tree/master/src/modal/docs
答案 1 :(得分:5)
这是错误的做法 - 你不能"只关闭模态",因为你不知道要关闭哪个模态。我建议你重新设计一下......
您可以查看$uibModalStack
- 它会存储已打开的模态并使用dismisAll
等方法
答案 2 :(得分:3)
我使用带有$ uibModal和open()方法的close()方法来管理AngularJS $ uiModal
打开方法
vm.lanzarPopShowTask = lanzarPopShowTask;
function lanzarPopShowTask(index){
vm.modalInstance = $uibModal.open({
animation: true,
ariaLabelledBy: 'modal-title-top',
ariaDescribedBy: 'modal-body-top',
templateUrl: '/btask/index/task.html',
size: 'm',
controller: function ($scope) {
vm.task = vm.tasks[index];
vm.index = index;
},
scope: $scope
});
}
并关闭方法
vm.modalInstance.close();
答案 3 :(得分:3)
在执行此操作时,我将模态设置为范围变量,然后使用$scope.sweetModal.close()
或$scope.sweetModal.dismiss()
您必须记住,如果您要执行以下操作,则无法工作:
$scope.openModal = function () {
$scope.sweetModal = $uibModal.open({
templateUrl: '/modals/sweetModal.html',
size: 'md',
scope: $scope,
backdrop: true
})
.result.then($scope.modalCloseFunction, $scope.modalDismissFunction);
};
由于变量的设置方式,以下内容可行:
$scope.openModal = function () {
$scope.sweetModal = $uibModal.open({
templateUrl: '/modals/sweetModal.html',
size: 'md',
scope: $scope,
backdrop: true
});
$scope.sweetModal.result.then($scope.modalCloseFunction, $scope.modalDismissFunction);
};