2015-01-09 30 views
9

Angularjs文檔$控制器服務給$控制器業務使用量爲: $controller(constructor, locals);使用情況在angularjs

任何人都可以關注一些光這2點:

  1. 當使用$控制器服務。請提供一些用例。
  2. 有關傳遞給它的'locals'參數的詳細信息。
+1

由於您無法真正注入控制器,並且您想在任何需要使用'$ controller'提供者的地方實例化控制器。一些信息[你可以在這裏找到](http://stackoverflow.com/questions/25417162/how-do-i-inject-a-controller-into-another-controller-in-angularjs/25417210#25417210) – PSL

回答

11

您可以創建要在$範圍內執行到一個控制器可以被命名爲'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; 
}]); 

,並注入該控制器在其他控制器讓說「TestCtrl1」像

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

這裏,由CommonCtrl需要在$控制器服務的第二個參數,我們傳遞的依賴關係。所以doCommonStuff方法將使用TestCtrl1控制器的作用域。

3

提一個,它在單元測試期間創建目標控制器很有用。

假設你有一個簽名爲.controller('MainCtrl', function($scope, serviceA){..})的控制器。

在測試中,

// ... 
 

 
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() { 
 
    //... 
 
});

欲瞭解更多信息結帳:https://docs.angularjs.org/guide/unit-testing

相關問題