2017-07-27 4 views
-1

ブートストラップモーダルの隠れたイベントに対して角度関数を呼び出す必要があります。ここで

$('#modalAddAction').on('hidden.bs.modal', 
     function (e) { 
      console.log("in hidden.bs.modal"); 
      var $rootScope = angular.element(document.querySelector("[ng-controller=actionsController]")).scope(); 
      if ($rootScope) { 
       $rootScope.$apply(function() { 
        $rootScope.initializeAt1(); 
       }); 
      } 
     }); 

は私が呼び出す必要がコントローラで定義された関数である:

 $scope.initializeAt1 = function() { 
      $scope.data.addAction.actionTypeId; // initialized in $scope.getActionTypes 
      $scope.data.addAction.actionStatus = 1; 
      // initializers help set drop downs to appropriate selection. 
      $scope.data.addAction.actionType1.actionRecommendedByLerId = 0; 
      $scope.data.addAction.actionType1.actionsRecommendedByLer = []; 
      $scope.data.addAction.actionType1.actionProposedBySupervisorId = 0; 
      $scope.data.addAction.actionType1.actionTakenBySupervisorId = 0; 
      $scope.data.addAction.actionType1.actionChargeId = 0; // formerly initialized in $scope.getActionCharges 
      $scope.data.addAction.actionType1.actionCharges = []; 
     }(); 

コントローラの工場が実行されるので、初めて、initializeAt1ここ

は私の隠されたイベントハンドラです関数はそれ自身を呼び出し、必要な初期化を行います。

次に、保存ボタン、キャンセルボタン、または画面上をクリックするだけで、モーダルが非表示になったときに、initializeAt1を再度呼び出そうとします。

#modalAddAction - ここに隠されたイベントは、私は、このエラーを与える:

[$rootScope:inprog] $digest already in progress 

は、だから今、私は(適用とだけ直接$ rootScopeから関数を呼び出しをコメントアウト)これに彼イベントハンドラを変更しよう:

$('#modalAddAction').on('hidden.bs.modal', 
     function (e) { 
      console.log("in hidden.bs.modal"); 
      var $rootScope = angular.element(document.querySelector("[ng-controller=actionsController]")).scope(); 
      //if ($rootScope) { 
       //$rootScope.$apply(function() { 
        $rootScope.initializeAt1(); 
       //}); 
      //} 
     }); 

これでエラーが発生しました。

$rootScope.initializeAt1 is not a function 

私はrootScopeを持っていますが、なぜこの機能は見えませんか?

+0

こんにちは私はあなたがvar $ rootScopeをやっていると思う。あなたは新しいオブジェクトで$ rootScopeを再割り当てしています。 –

答えて

0

私はそれを理解しました。 定義の後に関数が自分自身で呼び出されるのが好きではありませんでした。 $ rootScopeの$ scopeを調べたところ、initailizeAt1は未定義としてリストされていました。

最後から外れていなければなりませんでした。

、コールの追加:最後に

 $scope.initializeActions = function() { 
      $scope.initializeAt1(); 
     } 
     $scope.initializeActions(); 

を。

At2、At3のinitをinitializeActionに追加します。

関連する問題