Selbsterklärend Geige: http://jsfiddle.net/5FG2n/1/Wie löse ich einen inneren Controller auf und weise ihn dem äußeren Bereich zu?
sagen, dass ich eine Ansicht mit zwei Controllern haben, das eine das andere enthält. Der äußere Controller ist statisch, aber ich muss den inneren Controller basierend auf einer Bereichsvariablen aus dem Äußeren setzen. Die Bereichsvariable ist der Name des inneren Controllers als String (zB 'InnerCtrl'
).
Hier ist die Ansicht:
<div ng-app='app' ng-controller='OuterCtrl'>
<div ng-controller='dynamicCtrl'>
{{result}}
</div>
</div>
Und hier ist das Modul, das noch nicht korrekt ist:
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!'; }
};
});
ich den $ Injektor-Dienst versucht:
$scope.dynamicCtrl = $injector.get('InnerCtrl');
Aber das gibt : "Unbekannter Anbieter: InnerCtrlProvider < - InnerCtrl"
Ich dachte auch über den $ Controller-Dienst:
$scope.dynamicCtrl = $controller('InnerCtrl', {} /* don't want to hard code dependencies */);
Aber das gibt mir "Unbekannten Anbieter: $ scopeProvider < - $ scope". Ich weiß, dass ich einen Spielraum schaffen könnte, um hineinzugehen, aber ich denke, dass angular sollte automatisch den Umfang und die Dienstabhängigkeiten für mich auflösen.
Wie kann ich eine Controller-Funktion von ihrem Namen als String zusammen mit ihren Abhängigkeiten auflösen, sodass sie einer Bereichsvariablen zugewiesen werden kann?