Javascript AngularJs:迭代指令内部的数组,以创建嵌套的指令集

Javascript AngularJs:迭代指令内部的数组,以创建嵌套的指令集,javascript,angularjs,angularjs-directive,angularjs-ng-repeat,ng-repeat,Javascript,Angularjs,Angularjs Directive,Angularjs Ng Repeat,Ng Repeat,在angularJS指令中,我尝试遍历数组,并基于值创建指令的嵌套列表。 指令的当前版本 指令类型 .directive("type", function($compile, $log){ return{ restrict: "E", replace: true, transclude: true, scope: { type: '='

在angularJS指令中,我尝试遍历数组,并基于值创建指令的嵌套列表。 指令的当前版本

指令类型

    .directive("type", function($compile, $log){
        return{
            restrict: "E",
            replace: true,
            transclude: true,
            scope: {
                type: '='
            },
            template: "<div></div>",
            link: function(scope, element, attrs){
                if (angular.isArray(scope.type)){
                    angular.forEach(scope.type, function(value, index){
                        $log.error(value);
                        element.append("<type type='scope.type['"+index+"]'></type>");
                    });
                } else if (angular.isObject(scope.type)){
                    element.append("OBJECT")
                } else {
                    element.append("<div>{{scope.type}}</div>")
                }
                $compile(element.contents())(scope)
             }
        };
      })
新指令:

link: function(scope, element, attrs) {
    if (angular.isArray(scope.type)) {
        element.append("<typeb type='scope.type'></typeb>")
    } else if (angular.isObject(scope.type)) {
        element.append("OBJECT")
    } else {
        element.append("<div>{{scope.type}}</div>")
    }
    $compile(element.contents())(scope)
}
.directive("typeb", function($compile, $log){
      return{
          restrict: "E",
          replace: true,
          transclude: true,
          scope: {
              type: '='
          },
          template: "<div ng-repeat='t in type'>{{t}}</div>",
      };
    })
指令(“typeb”,函数($compile,$log){ 返回{ 限制:“E”, 替换:正确, 是的, 范围:{ 类型:'=' }, 模板:“{t}}”, }; }) 问题仍然存在,但由于
typeb
指令,生成的html只包含下一部分:

在模板中使用ng重复

<your-directive attr="item.someattr" ng-repeat="item in items"></your-directive>

.directive("type", function($compile, $log){
    return{
        restrict: "E",
        replace: true,
        transclude: true,
        scope: {
            type: '='
        },
        template: "NG REPEAT HERE",
        ...
  })

.directive(“type”,函数($compile,$log){
返回{
限制:“E”,
替换:正确,
是的,
范围:{
类型:'='
},
模板:“NG在此重复”,
...
})

您遇到的问题是
这是因为您的类型在
typeb
指令中时没有包含任何值

您的指令不应在视图上使用scope.variable。 范围变量将通过其名称直接访问,如

{{type}

将您的链接代码更改为下面的

指令链接

link: function(scope, element, attrs) {
    if (angular.isArray(scope.type)) {
        element.append("<typeb type='type'></typeb>")
    } else if (angular.isObject(scope.type)) {
        element.append("OBJECT")
    } else {
        element.append("<div>{{type}}</div>")
    }
    $compile(element.contents())(scope)
}
链接:函数(范围、元素、属性){
if(角度isArray(范围类型)){
元素。追加(“”)
}else if(角度等高线(范围类型)){
元素。追加(“对象”)
}否则{
元素。追加(“{type}}”)
}
$compile(element.contents())(作用域)
}

谢谢。

确切位置在哪里?我正在使用ng repeat in link函数(第二个示例)但它不起作用。更新了它。基本上,在你想要重复指令的外部范围内。你有这个外部指令类型,使用它的模板来重复子指令。问题是传递给
类型
指令的属性值并不总是数组或对象-有时它可能只是单个stri例如:“int”。它将处理这种情况?允许您的子指令处理它的实际类型,以正确的方式显示自身。将重复行为与特定类型的显示行为分开try
元素。append($compile(“”)(scope));
这对我没有帮助。有趣的是,在html中我看到这样的东西:
如果
作用域。type
等于
[“double”,“null”]
link: function(scope, element, attrs) {
    if (angular.isArray(scope.type)) {
        element.append("<typeb type='type'></typeb>")
    } else if (angular.isObject(scope.type)) {
        element.append("OBJECT")
    } else {
        element.append("<div>{{type}}</div>")
    }
    $compile(element.contents())(scope)
}