2016-05-24 7 views
0

'ngDialog.closed'イベントをリッスンすると、複数回発生していることが判明しました。一度しかダイアログを開いていないので、同じモーダルを閉じると仮定すると、このイベントは1回だけ起動する必要があります。以下のようなので、そこのアプリケーションにまたがる複数のモーダルがあり、我々は$ rootScopeに取り付けることによって、この特定のモーダルのために聞く:ngDialog閉鎖されたイベントの発生回数(AngularJS)

  $rootScope.$on('ngDialog.closed', function (e, $dialog) { 
      console.log("CLOSED TEHE MODAL", $dialog); 
      console.log("EVENT", e); 
      if($rootScope.modalFinished && localStorage.getItem("tourComplete") !== "true"){ 
       $rootScope.modalFinished = false; 
       console.log("THIS IS LOCAL STORE:", localStorage.getItem("tourComplete")); 
        $scope.CallMe(); 
      } 
     }); 

我々は$ rootScope経由で聞いている理由は、1から、この「閉」イベントを渡すことですモデラーの前に既にロードされている別のコントローラー(ホーム画面)に移動します。

「ngDialog.closed」イベントでは、複数のイベントが発生していることがわかりました(通常、モーダルの終了につき2〜3回まで)。我々は(ログインコントローラで)ngDialogを開くのはここ

は次のとおりです。

     $state.go('app.dashboard') 
         if(AclService.can('edit')|| AclService.can('admin')){ 

         $scope.$on('$stateChangeSuccess', function onStateSuccess(event, toState, toParams, fromState){ 

          $rootScope.modalFinished = true; 
          CauseService.get().then(function(result){ 
          var cause = result[0].attributes; 

          if(!cause.has_backlinked || !cause.has_verified_address){ 
           // $rootScope.modalFinished = true; 
           ngDialog.open({ 
           template: '../../app/views/dashboard/progress_modal.html', 
           showClose: false, 
           className: 'ngdialog-theme-default progressModal', 
           controller: 'ProgressModalController', 
           resolve:{ 
            'Cause': ['CauseService', function(CauseService){ 
            // console.log("CauseService in routes", CauseService.get()); 
            return CauseService.get(); 
            }] 
           } 
           }); 
          } 
          }); 
         }); 
         } 

任意の助けいただければ幸いです。

ありがとうございます。よし

-M-

答えて

1

試行錯誤の多くの後、私が原因$ rootScopeに「ngDialog.close」イベントを添付して、私たちが聞いているコントローラは、すでにモーダルのコントローラの前にロードされたと結論付けて各コントローラは、モーダルが閉じられたというイベントをログに記録します。

は、この問題を解決するには、私はそうのような$の範囲に「ngDialog.close」添付イベント:

 $scope.$on('ngDialog.closed', function (e, $dialog) { 
     if($rootScope.modalFinished && localStorage.getItem("tourComplete") !== "true"){ 
      $rootScope.modalFinished = false; 
      console.log("THIS IS LOCAL STORE:", localStorage.getItem("tourComplete")); 
      console.log("****************NGDIALOG IS CALLED") 
      $scope.CallMe(); 
     } 
     }); 

そして今だけの所望の動作を「ngDialog.close」イベントは内部に発射されますダッシュボードコントローラ。この解決策は、このリスナーが他の$状態またはコントローラ内の他のモーダルで起動されるという問題も解決します。

この回答をお寄せいただければ、ありがとうございます。

-M-

関連する問題