2016-05-19 1 views
0

Noob alert!ui-bootstrap: Zugriff auf die modale Instanz über den Direktiven-Controller

Die Frage hier ist genau das ein, was ich habe: angularjs - Accessing ui-bootstrap modal dismiss and close function from another controller

Allerdings verstehe ich nicht die Antwort, die als richtig gewählt wurde! Ich verstehe die Wörter, verstehe aber nicht, wie man den Controller teilt.

Ich habe einen App-Controller, der ein Modal öffnet, und innerhalb der Modal-Vorlage habe ich eine Direktive. Ich möchte in der Lage sein, die modale Instanz aus dem Controller der Direktive zu manipulieren.

Hier ist mein Markup:

 <script type="text/ng-template" id="settingsModal"> 
      <div class="modal-header"> 
       <h3 class="modal-title">Confirm update!</h3> 
      </div> 
      <div class="modal-body"> 
       <calendar-settings cid="calendarId"/> 
      </div> 
      <div class="modal-footer"> 
       <!-- I want these buttons inside the directive instead --> 
       <button class="btn btn-primary" ng-click="ok()">OK</button> 
       <button class="btn btn-warning" ng-click="cancel()">Cancel</button> 
      </div> 
     </script> 

Im Körper des modalen, ich rufe die calendarSettings Richtlinie, und ich möchte die .dismiss und .close Methoden der modalen Instanz in der Lage sein zu verwenden, aus meiner Direktive.

Hier ist, was die offene Methode wie folgt aussieht:

  var modalInstance = $modal.open({ 
       templateUrl: 'settingsModal', 
       controller: 'ModalInstanceController', 
       resolve: { 
        item: function() { 
         return $scope.sEntry; 
        }, 
        cid: function() { 
         return id; 
        } 
       }, 
       reject: { 
        item: function() { 
         return $scope.sEntry; 
        }, 
        cid: function() { return null; } 
       } 
      }); 

Und hier ist der ModalInstanceController:

calendarsApp.controller('ModalInstanceController', function($scope, $modalInstance, item, cid){ 
     $scope.item = item; 
     $scope.calendarId = cid; 
     console.log(item); 

     $scope.ok = function() { 
      $modalInstance.close($scope.item); 
     }; 

     $scope.cancel = function() { 
      $modalInstance.dismiss('cancel'); 
     }; 
    }); 

denke ich, was ich will ist einfach zu tun, aber ich bin nicht sicher, wie man aussetzen der Modal-Instanz-Controller der Richtlinie, oder wenn es einen anderen Ansatz gibt, an den ich denken sollte.

HINWEIS: Ich habe den Code aus der Direktive hier nicht eingefügt. Aber ich versuche, die Methoden zum Schließen und Schließen der modalen Instanz aus dem Controller meiner Direktive zu entfernen.

Danke für jede Hilfe!

Antwort

0
So 

    var modalInstance = $modal.open({ 
        templateUrl: 'settingsModal', 
        controller: 'ModalInstanceController', 
        resolve: { 
         item: function() { 
          return $scope.sEntry; 
         }, 
         cid: function() { 
          return id; 
         } 
        }, 
        reject: { 
         item: function() { 
          return $scope.sEntry; 
         }, 
         cid: function() { return null; } 
        } 

       //This comes from ModalInstanceController result is     
        //equivalent to whatever u send back 
       }).result.then(function(result){ 
     console.log(result); //Press f12 on chrome and go to console. 
    }); 



calendarsApp.controller('ModalInstanceController', function($scope, $modalInstance, item, cid){ 
     $scope.item = item; 
     $scope.calendarId = cid; 
     console.log(item); 

     $scope.ok = function() { 
      //You are sending back $scope.item but if you want everything 

//send back the $scope which is equivalent to sending back //ModalInstanceController 
     // $modalInstance.close($scope.item); 
      $modalInstance.close($scope); 
     }; 

     $scope.cancel = function() { 
      $modalInstance.dismiss('cancel'); 
     }; 
    }); 
+0

Verwenden Sie auch typescript statt plain JS. Dies wird viel helfen. – hidden

+0

Vielen Dank für Ihre Hilfe! Ich glaube, ich verstehe, was Sie gesagt haben, aber ich glaube immer noch nicht, dass ich verstehe, wie ich auf diese Dinge innerhalb des Controllers einer Direktive zugreifen kann. Ich habe den Code der Direktive nicht in die Frage gestellt, aber es gibt eine Direktive namens calendarSettings mit einem eigenen isolate-Bereich, in der ich versuche, auf die modale Instanz zuzugreifen, und die Methoden close oder disc vom Controller der Direktive aufzurufen – MoDiggity

Verwandte Themen