首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自指令模板的动态指令

来自指令模板的动态指令
EN

Stack Overflow用户
提问于 2014-06-23 19:16:33
回答 2查看 108关注 0票数 0

我希望基于指令名数组在我的页面中加载指令。

在我的主页:

代码语言:javascript
复制
<div component-loader></div>

指令:

代码语言:javascript
复制
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>'
    };
});

范围:

代码语言:javascript
复制
$scope.components = [{
    directive:  'directive01'
},{
    directive:  'directive02'
}]

我所期待的:

代码语言:javascript
复制
<div directive01></div>
<div directive02></div>

我得到了什么:

代码语言:javascript
复制
<div {{component.directive}}></div>
<div {{component.directive}}></div>

我做错了什么?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2014-06-23 20:31:17

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

代码语言:javascript
复制
<div component-loader="components"></div>

你的链接功能

代码语言:javascript
复制
function(scope, element, attrs) {
    var components = attrs.componentsLoader;
    // Or use scope.components or scope.$parent.components depending on
    // how your scopes are organised

    angular.forEach(components, function (component) {
        element.append(angular.element().attr(component.directive, '');
    });        

    $compile(element.contents())(scope);
}
票数 0
EN

Stack Overflow用户

发布于 2014-06-25 17:47:26

仍然不是一个理想的解决方案,但它做了我想做的事:

代码语言:javascript
复制
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
    };
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24373630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档