$controller的使用




You can create common functions which are to be executed on $scope into one controller may be named ​​'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;
}]);


And inject this controller in other controllers let say 'TestCtrl1' like

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


Here, the in second argument of $controller service, we are passing dependencies that are required by CommonCtrl. So the doCommonStuff method will use TestCtrl1 controller's scope.

-----------------------------------------------------------------------------

To mention one, it is useful in creating the target controller during unit testing.

Lets say you have a controller with signature ​​.controller('MainCtrl', function($scope, serviceA){..})​​.

In testing,

 




// ...

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