2016-09-30 10 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; 
}; 

その後、私は1を開く:

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常にクラス名を持つdiv要素を使用しています $uibModalので

//If no modal is open 
if (document.getElementsByClassName("modal").length === 0) { 
    //do something... 
} else { 
    // do something when a modal is open 
} 
関連する問題