【发布时间】:2014-02-07 20:58:20
【问题描述】:
自解释小提琴:http://jsfiddle.net/5FG2n/6/
我需要根据其名称作为字符串动态选择要在运行时使用的控制器。该字符串将从配置对象中读取。
在下面的代码中,我目前将InnerCtrlAsLocalVariable 分配给$scope.dynamicCtrl。我该如何将InnerCtrlFromModule 分配给该属性?
查看:
<div ng-app='app' ng-controller='OuterCtrl'>
<div ng-controller='dynamicCtrl'>
{{message}}
</div>
</div>
JS:
var InnerCtrlAsLocalVariable = ['$scope',
function($scope) {
$scope.message = 'from controller as local variable - do not want'
}
];
angular.module('app', [])
.controller('OuterCtrl', ['$scope',
function($scope) {
// Instead of doing this...
$scope.dynamicCtrl = InnerCtrlAsLocalVariable;
// ...I want to do something like this:
// $scope.dynamicCtrl = resolveCtrl('InnerCtrlFromModule');
}
])
.controller('InnerCtrlFromModule', ['$scope',
function($scope) {
$scope.message = 'from controller defined in module - want';
}
]);
【问题讨论】:
-
为什么需要将控制器分配给变量?您通过服务共享数据。
-
虽然我真的不明白目的,你可以选择动态模板(inner-local-template.html,inner-module-template.html')而不是选择动态控制器。
-
这不是为了共享数据,这是为了让我可以在运行时动态选择控制器。
-
我已经通过绑定 ng-include 上的 src 属性来动态选择模板。但是同一个模板可能在不同的情况下使用不同的控制器。因此,我需要避免将控制器名称硬编码到模板中。
-
我找不到动态注入或解析控制器的方法。
标签: javascript angularjs angularjs-scope angularjs-controller