2016-09-30 26 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 
} 
相關問題