Самоочевидная скрипка: http://jsfiddle.net/5FG2n/1/
Скажем, у меня есть представление с двумя контроллерами, один из которых содержит другой. Внешний контроллер является статическим, но мне нужно установить внутренний контроллер на основе переменной области видимости из внешнего. Переменная области видимости будет именем внутреннего контроллера в виде строки (например, 'InnerCtrl'
).
Вот вид:
<div ng-app='app' ng-controller='OuterCtrl'>
<div ng-controller='dynamicCtrl'>
{{result}}
</div>
</div>
А вот модуль пока не правильный:
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!'; }
};
});
Я попытался использовать службу $injector:
$scope.dynamicCtrl = $injector.get('InnerCtrl');
Но это дает: «Неизвестный провайдер: InnerCtrlProvider ‹- InnerCtrl»
Я также думал об использовании сервиса $controller:
$scope.dynamicCtrl = $controller('InnerCtrl', {} /* don't want to hard code dependencies */);
Но это дает мне «Неизвестный провайдер: $scopeProvider ‹- $scope». Я знаю, что мог бы создать область для передачи, но я чувствую, что angular должен автоматически разрешать для меня области действия и зависимости службы.
Как определить функцию контроллера по ее имени в виде строки вместе с ее зависимостями, чтобы ее можно было назначить переменной области видимости?