Angularjs 如何从指令的字符串中动态包含控制器?
我需要根据组件名作为字符串动态选择ngRepeat的控制器。普朗克:Angularjs 如何从指令的字符串中动态包含控制器?,angularjs,angularjs-directive,angularjs-controller,Angularjs,Angularjs Directive,Angularjs Controller,我需要根据组件名作为字符串动态选择ngRepeat的控制器。普朗克: 正如你所看到的,我找到了一个解决方案,但我不认为这是一种角度方法,因为我已经创建了一个控制器堆栈,并将它们分配给角度范围之外的“控制器”变量 以下是HTML: <table border="1" class="item" data-ng-repeat="component in components"> <tr> <td> <div co
正如你所看到的,我找到了一个解决方案,但我不认为这是一种角度方法,因为我已经创建了一个控制器堆栈,并将它们分配给角度范围之外的“控制器”变量 以下是HTML:
<table border="1" class="item" data-ng-repeat="component in components">
<tr>
<td>
<div component="component"></div>
</td>
</tr>
</table>
Javascript
var app = angular.module("sortableApp", []);
app.controller("appCtrl", ["$scope", function($scope) {
$scope.components = [{
name: 'simpleText',
tpl: 'simple-text.html',
content: 'Simple text'
}, {
name: 'heading',
tpl: 'heading.html',
content: 'Heading'
}];
}]);
app.directive("component", ["$templateCache", "$compile", function($templateCache, $compile) {
return {
restrict: "A",
scope: {
component: "="
},
controller: function($scope) {
if(controllers[$scope.component.name]) {
return controllers[$scope.component.name]($scope);
}
},
link: function(scope, element, attrs) {},
template: '<div ng-include="component.tpl"></div>'
}
}]);
var controllers = {
simpleText: function($scope) {
$scope.add = function() {
alert('add text');
}
},
heading: function($scope) {
$scope.add = function() {
alert('add heading');
}
}
}
var-app=angular.module(“sortableApp”,[]);
app.controller(“appCtrl”、[“$scope”、函数($scope){
$scope.components=[{
名称:“simpleText”,
tpl:'simple text.html',
内容:“简单文本”
}, {
名称:'标题',
tpl:'heading.html',
内容:“标题”
}];
}]);
指令(“组件”[“$templateCache”,“$compile”,函数($templateCache,$compile){
返回{
限制:“A”,
范围:{
组件:“=”
},
控制器:功能($scope){
if(控制器[$scope.component.name]){
返回控制器[$scope.component.name]($scope);
}
},
链接:函数(作用域、元素、属性){},
模板:“”
}
}]);
变量控制器={
simpleText:函数($scope){
$scope.add=函数(){
警报(“添加文本”);
}
},
标题:职能($范围){
$scope.add=函数(){
警报(“添加标题”);
}
}
}
如何以有角度的方式实现我的目标?谢谢你的回答 引用的fiddle完全基于angularjs。那么,angular模块之外的控制器定义是正常的吗?我看到了以下结构` controller:'@',name:'controllerName',`但在我的情况下,它不起作用任何解决方案??我发现: