【发布时间】:2014-02-06 10:16:46
【问题描述】:
自解释小提琴: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
我也想过使用 $controller 服务:
$scope.dynamicCtrl = $controller('InnerCtrl', {} /* don't want to hard code dependencies */);
但这给了我“未知的提供者:$scopeProvider
如何将控制器函数的名称解析为字符串及其依赖项,以便将其分配给范围变量?
【问题讨论】:
标签: javascript angularjs angularjs-scope angularjs-controller