2015-04-05 15 views
5

Ho passato un po 'di tempo a giocare con il popup Bootstrap di AngularJS, e per le intenzioni funziona benissimo, ma quello che mi piacerebbe fare è legarlo, ed è lo script dipendente per lo stesso controller, cosa non posso funzionare è il pulsante di chiusura ora però. Se creo un controller NEW e inietto $ modalInstance funziona alla grande e posso collegare il pulsante di chiusura senza alcun problema, ma non voglio un secondo controller, sembra essere una complicazione eccessiva: voglio tutta la logica del mio controller nel formController davvero.

Perché in realtà vorrei due controller? Passare lo spazio tra due controller mi sembra eccessivo, e più grande diventa il progetto più diventa maneggevole. Sto cercando di semplificare eccessivamente questo inutilmente? :)

Lo script:

(function(){ 
    var app = angular.module('ngModalDemo', ['ui.bootstrap']) 
    .controller('formController', function($scope, $modal){ 
     $scope.openModal = function() {       
      var modalInstance = $modal.open({ 
       templateUrl: 'SomeModal.html', 
       controller: 'formController'            
      }); 
     }; 
     $scope.closeModal = function() { 
      // Code needed here :) 
     }; 
    }) 
})(); 

Il corpo HTML (scusate il codice HTML nello script ai fini della demo):

<div ng-controller="formController"> 
     <button class="btn btn-default" ng-click="openModal()">Let's do some stuff!</button> 

     <script type="text/ng-template" id="SomeModal.html"> 
      <div class="modal-header">Do some stuff in this modal y'all.</div> 
      <div class="modal-footer"> 
       <button class="btn btn-info" ng-click="closeModal()">Close</button> 
      </div> 
     </script> 
    </div> 

La risposta sulla base di Kaspars' ingresso :)

(function(){ 
      var app = angular.module('ngModalDemo', ['ui.bootstrap']) 
      .controller('formController', function($scope, $modal, $log){ 
       $scope.openModal = function() {       
        var modalInstance = $modal.open({ 
         templateUrl: 'SomeModal.html', 
         controller: [ 
          '$scope', '$modalInstance', function($scope, $modalInstance){ 
           $scope.closeModal = function() { 
            $modalInstance.close(); 
           }; 
          } 
         ]       
        }); 
       }; 
      }) 
     })(); 
+0

un controller modale separata grandi opere, se il modal sta per essere condivisa da molti controllori – gaurav5430

risposta

7

Ero alle prese con lo stesso problema e la cosa migliore che ho trovato era usare la funzione anonima come un contr oller. In questo modo tutta la logica è nello stesso controller e non è necessario creare un controller separato per ogni finestra modale.

Questo sarebbe simile a questa:

(function(){ 
    var app = angular.module('ngModalDemo', ['ui.bootstrap']) 
    .controller('formController', function($scope, $modal){ 
     $scope.openModal = function() {       
      var modalInstance = $modal.open({ 
       templateUrl: 'SomeModal.html', 
       controller: [ 
        '$scope', '$modalInstance', 'data', function($scope, $modalInstance, data) { 
         $scope.data = data; 
         $scope.ok = function() { 
          $modalInstance.close(); 
         }; 
         $scope.closeModal = function() { 
          $modalInstance.dismiss(); 
         }; 
        } 
       ] 
      }); 
     }; 
    }) 
})(); 

PS. Non ho testato il codice sopra, ma metto insieme il codice e i frammenti forniti da uno dei miei progetti.

+0

Grazie Kaspars, che ha funzionato a meraviglia, ho aggiunto il codice vero e proprio, che ho semplificato per riferimento alla domanda originale :) – NewZeroRiot

0

Si può anche provare questo

var modalInstance = $modal.open({ 
           templateUrl : 'someTemplate.html', 
           scope : $scope, 
           size : 'md' 
          }); 
Problemi correlati