2015-01-09 8 views
9

docs Angularjs dare l'utilizzo del servizio di controllo $ come: $controller(constructor, locals);

Qualcuno può concentrarsi un po 'di luce su questi 2 punti:

  1. Quando usare $ regolatore Servizio. Si prega di fornire qualche caso d'uso.
  2. I dettagli sul parametro 'locals' sono passati ad esso.
+1

Poiché non è possibile iniettare realmente il controller e se si desidera creare un'istanza di un controller ovunque sia necessario utilizzare il provider '$ controller'. Alcune informazioni [puoi trovare qui] (http://stackoverflow.com/questions/25417162/how-do-i-inject-a-controller-into-another-controller-in-angularjs/25417210#25417210) – PSL

risposta

11

È possibile creare funzioni comuni che devono essere eseguiti su $ portata in un controller può essere chiamato 'CommonCtrl' .

angular.module('app',[]).controller('CommonCtrl', ['$scope', function($scope){ 
     var self = this; 
     $scope.stuff1 = function(){ 

     } 

     $scope.stuff2 = function(){ 

     } 
     self.doCommonStuff = function(){ 
       // common stuff here 
       $scope.stuff1(); 
       $scope.stuff2(); 

     }; 
     return self; 
}]); 

e iniettare questo controller in altri controller diciamo 'TestCtrl1' come

angular.module('app',[]).controller('TestCtrl1', ['$scope','$controller', function($scope, $controller){ 
     var commonCtrl = $controller('CommonCtrl',{$scope: $scope}); // passing current scope to commmon controller 
     commonCtrl.doCommonStuff(); 
}]); 

Qui, le dipendenze in secondo argomento del servizio di $ regolatore, stiamo passando che sono richiesti da CommonCtrl. Quindi il metodo doCommonStuff utilizzerà l'ambito del controllore TestCtrl1.

3

Per citarne uno, è utile per creare il controller di destinazione durante il test dell'unità.

Diciamo che avete un controller con la firma .controller('MainCtrl', function($scope, serviceA){..}).

In fase di test,

// ... 
 

 
beforeEach(inject(function ($rootScope, $controller, serviceA) { 
 

 
    // assign injected values to test module variables 
 
    scope = $rootScope.$new(); 
 
    service = serviceA 
 

 
    // create the controller, by passing test module variables values as dependencies 
 
    $controller('MainCtrl', {'$scope': scope, 'serviceA': service}); 
 
})); 
 

 
it('test on controller', function() { 
 
    //... 
 
});

Per maggiori informazioni checkout: https://docs.angularjs.org/guide/unit-testing

Problemi correlati