2016-09-30 4 views
1

이미 열려있는 경우 내 응용 프로그램이 모달을 열 수 있습니다. 그렇다면 그 모달을 닫고 새로운 모달을 여는 것이 좋습니다.부트 스트랩 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을 사용할 수 있습니다

서비스는 조동사를 엽니 다() 내 모달을 여는 것과 동일한 스위치/케이스 안에서. 나중에 다른 if 문에서 코드를 닫고 싶다면 m은 정의되지 않습니다.

어쨌든. 모달이 열려 있는지 확인할 수 있습니까?

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

그러나 나는 다른 곳에서 내 응용 프로그램에서 변수 m에 액세스 할 수 없습니다 그래서 나는 그것에 대해 확인할 수 없습니다 : 나는 (m)를 CONSOLE.LOG 경우이있다.

답변

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

이것은 작동합니다. 내가 어떻게 모달을 닫을 수 있는지 아는가? 이제 var m을 $ rootScope.m으로 바꿨습니다.이 앱을 사용하면 앱의 모든 곳에서 m에 액세스 할 수 있습니다. 더 나은 솔루션이 있는지 궁금합니다. $ rootScope.m = ModalService.open ('lg', '', 'ng-templates/modal.html', true, 'ModalController'); 다음과 같이합니다. $ rootScope.m.close(); – Bento

+0

'open'과 같은'modalInstance'를 지역 변수로 저장하고 추가 함수 (예 :'ModalService.closeModal()')를 구현하고 서비스 내부의 모달을 닫으십시오. 질문은 왜 범위 밖에서 모달을 닫고 싶은지입니다. –

0

아주 쉽게 :

클래스 이름을 가진 요소가 존재하는 경우 그냥 확인하실 수 있습니다 modal 항상 클래스 이름으로 사업부를 사용 $uibModal 때문에

:

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