2017-07-27 22 views
-1

Ich muss eine Angular-Funktion auf das ausgeblendete Ereignis eines Bootstrap-Modal aufrufen.

Hier ist meine versteckt Event-Handler:

$('#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(); 
       }); 
      } 
     }); 

Hier kann die Funktion in der Steuerung ich anrufen müssen definiert ist:

 $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 = []; 
     }(); 

Das erste Mal, wenn die Controller Factory ausgeführt wird, die initializeAt1 Funktion nennt sich selbst und macht die Initialisierung, die ich brauche.

Dann versuche ich initializeAt1 immer dann wieder aufzurufen, wenn das Modal ausgeblendet ist, sei es aus einer Speicherebene, einer Abbrechen-Schaltfläche oder einfach nur auf den Bildschirm klicken.

Die #modalAddAction - versteckt Veranstaltung hier gibt mir diese Fehlermeldung:

[$rootScope:inprog] $digest already in progress 

So, jetzt versuche ich, ihn-Event-Handler, dies zu ändern (Kommentar der Anwendung und einfach direkt rufen Sie die Funktion von $ rootScope out):

$('#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(); 
       //}); 
      //} 
     }); 

Und jetzt bekomme ich diesen Fehler.

$rootScope.initializeAt1 is not a function 

Also ich habe das RootScope, aber warum sieht es nicht die Funktion?

+0

Hallo ich denke, das Problem ist, Sie tun var $ rootScope .. Sie sind die Neuzuweisung der $ rootScope mit neuen Objekt .. es macht keinen Sinn –

Antwort

0

Ich fand es heraus. Es mochte einfach nicht, dass die Funktion nach der Definition selbst aufgerufen wurde. Als ich den $ scope aus dem $ rootScope inspizierte, wurde initailizeAt1 als undefined aufgelistet.

Hatte() vom Ende zu nehmen.

und den Anruf hinzufügen:

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

am Ende.

Wird dann init für At2, At3 usw. zu initializeActions hinzufügen.

Verwandte Themen