Javascript AngularJs:迭代指令内部的数组,以创建嵌套的指令集
在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: '='
.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)
}