Self explanatory fiddle: http://jsfiddle.net/5FG2n/1/
Say I have a view with two controllers, one containing the other. The outer controller is static, but I need to set the inner controller based on a scope variable from the outer. The scope variable will be the inner controller's name as a string (eg. 'InnerCtrl'
).
Here's the view:
<div ng-app='app' ng-controller='OuterCtrl'>
<div ng-controller='dynamicCtrl'>
{{result}}
</div>
</div>
And here's the module that is not yet correct:
angular.module('app', [])
.controller('OuterCtrl', ['$scope',
function($scope) {
// Instead of hard coding the controller here,
// how do I resolve the string 'InnerCtrl' to the
// controller function defined below, so it can be
// assigned to this dynamicCtrl property?
$scope.dynamicCtrl = function($scope) {
$scope.result = 'not working yet';
};
//eg:
//$scope.dynamicCtrl = resolveCtrl('InnerCtrl');
}
])
.controller('InnerCtrl', ['$scope', 'service',
function($scope, service) {
$scope.result = service.getMessage();
}
])
.factory('service', function() {
return {
getMessage: function() { return 'working!'; }
};
});
I tried using the $injector service:
$scope.dynamicCtrl = $injector.get('InnerCtrl');
But this gives: "Unknown provider: InnerCtrlProvider <- InnerCtrl"
I also thought about using the $controller service:
$scope.dynamicCtrl = $controller('InnerCtrl', {} /* don't want to hard code dependencies */);
But this gives me "Unknown provider: $scopeProvider <- $scope". I know I could create a scope to pass in, but I feel that angular should be automatically resolving the scope and service dependencies for me.
How do I resolve a controller function from its name as a string, together with its dependencies, so it can be assigned to a scope variable?