Angularjs 如何从指令的字符串中动态包含控制器?

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

我需要根据组件名作为字符串动态选择ngRepeat的控制器。普朗克:

正如你所看到的,我找到了一个解决方案,但我不认为这是一种角度方法,因为我已经创建了一个控制器堆栈,并将它们分配给角度范围之外的“控制器”变量

以下是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',`但在我的情况下,它不起作用任何解决方案??我发现: