Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 来自指令的动态指令';s模板_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript 来自指令的动态指令';s模板

Javascript 来自指令的动态指令';s模板,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我想根据指令名数组在页面中加载指令 在我的主页中: <div component-loader></div> myApp.directive('componentLoader', function($compile) { var component = function(scope, element, attrs) { $compile(element.contents())(scope); } return {

我想根据指令名数组在页面中加载指令

在我的主页中:

<div component-loader></div>
myApp.directive('componentLoader', function($compile) {
    var component = function(scope, element, attrs) {
        $compile(element.contents())(scope);
    }

    return {
        link:           component,
        replace:        true,
        scope:          true,
        template:       '<div ng-repeat="component in components"><div {{component.directive}}></div></div>'
    };
});
$scope.components = [{
    directive:  'directive01'
},{
    directive:  'directive02'
}]
<div directive01></div>
<div directive02></div>
<div {{component.directive}}></div>
<div {{component.directive}}></div>
我所期待的:

<div component-loader></div>
myApp.directive('componentLoader', function($compile) {
    var component = function(scope, element, attrs) {
        $compile(element.contents())(scope);
    }

    return {
        link:           component,
        replace:        true,
        scope:          true,
        template:       '<div ng-repeat="component in components"><div {{component.directive}}></div></div>'
    };
});
$scope.components = [{
    directive:  'directive01'
},{
    directive:  'directive02'
}]
<div directive01></div>
<div directive02></div>
<div {{component.directive}}></div>
<div {{component.directive}}></div>

我得到了什么:

<div component-loader></div>
myApp.directive('componentLoader', function($compile) {
    var component = function(scope, element, attrs) {
        $compile(element.contents())(scope);
    }

    return {
        link:           component,
        replace:        true,
        scope:          true,
        template:       '<div ng-repeat="component in components"><div {{component.directive}}></div></div>'
    };
});
$scope.components = [{
    directive:  'directive01'
},{
    directive:  'directive02'
}]
<div directive01></div>
<div directive02></div>
<div {{component.directive}}></div>
<div {{component.directive}}></div>

我做错了什么


谢谢

绑定只适用于属性内容,而不适用于属性名称(据我所知)。 相反,您可以使用一个无模板指令,在link函数中生成元素

<div component-loader="components"></div>

仍然不是理想的解决方案,但它符合我的要求:

myApp.directive('componentLoader', function($compile) {
    var component = function(scope, element, attrs) {

        scope.$watchCollection('components', function(a, b) {
            var code = '';
            var i;
            for (i=0;i<scope.components.length;i++) {
                code += '<div '+scope.components[i].directive+'></div>'
            }
            element.html($compile(code)(scope));

        });

    }

    return {
        link:           component,
        scope:          true
    };
});
myApp.directive('componentLoader',function($compile){ 变量组件=函数(范围、元素、属性){ 范围$watchCollection('组件'),功能(a,b){ var代码=“”; var i;
对于(i=0;iThanks),这是一个有效的解决方案。