2016-09-30 57 views
1

我的应用程序可以打开一个模式,如果已经有一个打开。如果是这种情况,我想关闭该模式并在完成后打开新模式。如何检查Bootstrap UI模块是否打开? - AngularJS

服开启情态动词:

app.service('ModalService', function($uibModal) { 
this.open = function(size, template, content, backdrop, controller) { 
    var modalInstance = $uibModal.open({ 
     animation: true, 
     templateUrl: content, 
     windowTemplateUrl: template, 
     controller: controller, 
     backdrop: backdrop, 
     size: size, 
     resolve: {} 
    }); 
    return modalInstance; 
}; 

然后我打开一个有:

var m = ModalService.open('lg', '', 'ng-templates/modal.html', true, 'ModalController'); 

而且我可以关闭它:

m.close(); 

我只能用m.close ()在同一开关/外壳内,因为我打开模式。如果我想在另一个代码中关闭它,如果稍后在代码m中的语句未定义。

无论如何。我可以检查一个模式是否打开?如果我CONSOLE.LOG(M)再有就是这个:

d.$$state.status = 1 
d.$$state.value = true 

但我不能访问变量m在我的应用程序的其他地方,所以我不能检查这一点。

回答

2

只需在您的ModalService上添加标志或吸气剂即可。

app.service('ModalService', function($uibModal) { 
var open = false, 
    modalInstance; 

this.isOpen = function() { 
    return open; 
}; 

this.close = function (result) { 
    modalInstance.close(result); 
}; 

this.dismiss = function (reason) { 
    modalInstance.dismiss(reason); 
}; 

this.open = function(size, template, content, backdrop, controller) { 
    var modal = $uibModal.open({ 
     animation: true, 
     templateUrl: content, 
     windowTemplateUrl: template, 
     controller: controller, 
     backdrop: backdrop, 
     size: size, 
     resolve: {} 
    }); 

    //Set open 
    open = true; 

    //Set modalInstance 
    modalInstance = modal; 

    //Modal is closed/resolved/dismissed 
    modal.result.finally(function() { 
     open = false; 
    }); 

    return modal; 
}; 
} 

然后,您可以拨打:ModalService.isOpen()检查,如果你的模式被打开。

+0

整齐漂亮,会给它一个镜头和报告背部。谢谢。 – Bento

+0

这工作。任何想法如何我可以关闭模​​态?我现在用$ rootScope.m替换了var m,它允许我在应用程序的任何地方访问m。想知道是否有更好的解决方案。 $ rootScope.m = ModalService.open('lg','','ng-templates/modal.html',true,'ModalController'); 然后我做:$ rootScope.m.close(); – Bento

+0

只需将像'open'这样的'modalInstance'存储为局部变量并实现一个附加函数(例如:'ModalService.closeModal()')并关闭服务中的模式。 问题是为什么你想关闭它的范围之外的模态。 –

0

非常简单:

由于$uibModal总是使用与类名的div modal你可以检查是否与该类名称的任何元素存在:

//If no modal is open 
if (document.getElementsByClassName("modal").length === 0) { 
    //do something... 
} else { 
    // do something when a modal is open 
}