2016-05-26 18 views
3

角ストラップとモーダルサービスを使用します。私はonHideパラメータでモーダルを閉じるときに関数を呼び出そうとします。角ストラップのモーダルのonHideオプションの使用方法

var _modal = $modal({ 
      templateUrl: "app/pages/fee/modals/historic/fee.historic.html", 
      controller: "HistoricController", 
      controllerAs: "vm", 
      keyboard: true, 
      show: false, 
      onHide: function() { 
       console.log("Close !"); 
      }, 
      onShow: function() { 
       console.log("Open !"); 
      } 
     }); 
_modal.$promise.then(_modal.show); 

しかし、モーダルを閉じても何も起こりません。コンソールにログ(クローズまたはオープン)が表示されません。 私にいくつかのアイデアを与えることができるかもしれない誰かに事前にありがとう!

+0

含まれているコードに問題はないようです。あなたのコントローラ設定を示すより多くのコードを提供できますか? JSFiddleでこれを複製することも役に立ちます。 – dspano

答えて

5

調査の結果、面白いケースが判明しました。

$modalは、分散バージョンでは同期していないようです。私は角度ストラップがバワーまたはnpmで取り出されるときを意味します。

  1. でも最新バージョン2.3.8にあなたがonShowまたはonHide

  2. への参照はgithubの上のソースを見てみましょ見つけることができない、角度のストラップの独自のローカルバージョンを見てみましょうレポ - >https://github.com/mgcrea/angular-strap/blob/master/src/modal/modal.js

ここ

onShowonHideが実際に発射されます!だから、モーダルは、分散されたバージョンの残りのアングルストラップと同期していないようです。

これは間違っているドキュメントではありませんが(私は実際に長い間信じていましたが)、ダウンロードしたソースは最新ではありません!

onShowなどのサポートが必要な場合は、最新の/modalをgithubリポジトリからローカルのアングルストラップにマージする必要があります。個人的には、アップグレードなどであらゆる種類の問題が発生するので、私はそれをしません - 私は私の元の答えにこだわっていますが、少なくとも私はなぜこれをしなければならないか分かります。


私の経験では、onShowなどのオプションの使用は無意味です。私はmodal.show/modal.hideイベントでハンドラを使用します。常にブロードキャストされます。マルチモーダル環境(モーダル上のモーダル)がある場合、混乱を避けるためにモーダルを「タグ付け」します。

var _modal = $modal({ 
    templateUrl: "app/pages/fee/modals/historic/fee.historic.html", 
    controller: "HistoricController", 
    controllerAs: "vm", 
    keyboard: true, 
    show: false, 
    tag: 'myModal' 
} 

$scope.$on('modal.show', function(e, target) { 
    if (target.$options.tag == 'myModal') { 
    //do stuff here 
    } 
}) 
$scope.$on('modal.hide', function(e, target) { 
    if (target.$options.tag == 'myModal') { 
    //do stuff here 
    } 
}) 
関連する問題