2017-07-27 45 views
-1

我需要在引導模式的隱藏事件上調用Angular函數。

這裏是我的隱藏事件處理程序:

$('#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 ..你重新分配$ newScope與新的對象..它沒有任何意義 –

回答

0

我想通了。 它只是不喜歡定義後自調用的函數。 當我檢查$ rootScope的$ scope時,initailizeAt1被列爲未定義。

不得不採取()結束。

並添加呼叫:

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

末。

然後將init添加到At2,At3等等initializeActions。