AngularJs:迭代指令内的数组以创建嵌套的指令集
AngularJs: Iterating over array inside directive in order to create nested set of directives
在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)
}
};
})
我还尝试将上述指令与下一版本的链接功能一起使用:
if (angular.isArray(scope.type)) {
element.append("<div ng-repeat='element in scope.type'><type type='element'></type></div>");
} else if (angular.isObject(scope.type)) {
element.append("OBJECT")
} else {
element.append("<div>{{scope.type}}</div>")
}
$compile(element.contents())(scope)
}
提供的代码都没有解决我的问题。您将在下面找到解释特定案例的示例:
假设我在
scope.type = [null,"int"]
中有下一个对象。现在我想使用<type type='type'><type>
,作为第一次评估的结果,我希望有这样的sth:<type type='type[0]'></type><type type='type[1]'></type>
对这些值的进一步评估应该会导致一些更简单的形式,但现在这并不重要。
我怎样才能实现这样的目标?
编辑
我甚至试图将负责迭代的部分代码减去到单独的指令,但它仍然不起作用。法典:
更新类型指令中的链接函数:
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>",
};
})
问题仍然存在,但生成的html仅包含由于typeb
指令而包含以下部分: <!-- ngRepeat: t in type -->
你得到的问题是<!-- ngRepeat: t in type -->
这是因为你的类型不包含任何值,当它位于指令typeb
你的指令不应该在视图上使用 scope.variable。范围变量将通过其名称直接访问,例如
{{type}}
或<typeb type='type'></typeb>
将您的链接代码更改为下面。
指令链接
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)
}
谢谢。
在模板中使用 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",
...
})
相关文章:
- 从对象数组中动态创建嵌套json
- 如何动态创建嵌套对象
- 动态创建嵌套的JSON对象父对象和子对象
- 在RubyonRails中创建嵌套表单
- 正在创建嵌套的if+else-if语句,但函数返回为未定义
- 基于类名创建嵌套列表
- 正在创建嵌套的HTML结构
- 创建嵌套的JSON数组
- 在 d3.js 中创建嵌套的 SVG 节点
- AngularJs:迭代指令内的数组以创建嵌套的指令集
- 如何在解析中创建嵌套的多对多关系
- 煎茶触摸 2:在选项卡面板内创建嵌套列表
- 使用 jQuery 创建嵌套 HTML 元素的最佳方式
- 是否可以在灰尘中创建嵌套的助手.js
- 使用 for 循环 javascript 创建嵌套的空数组
- 如何创建嵌套有 html 内容(模板)的基础弹出框
- 从动态创建的单个列表创建嵌套列表
- JavaScript:如何使用嵌套对象的变量名称创建嵌套对象
- 动态创建嵌套的 JSON 对象
- 如何创建嵌套的 JSON 字符串