【发布时间】:2016-08-24 00:37:03
【问题描述】:
我正在尝试根据对象数组填充表格。这个数组不包含相同类型的对象,对于每一行,我想要一个完全不同的样式,并且 onclick 函数基本上是一个完全不同的行为。 例如,
var data=[
{
type:'dir-b',
data: { ... }
},
{
type:'dir-b',
data: { ... }
},
{
type:'dir-c',
data: { ... }
}
]
对于对象类型 dirB,我想要一个模板和控制器,而对于 dirC,我想要一个完全不同的函数和模板。
我找到的解决方案是创建 3 个指令。其中一个将运行以确定要根据数据添加的另外两个指令之一。
.directive("dirA", function($compile){
return{
restrict:'A',
priority:1000,
terminal:true,
link: function(scope, element, attribute){
element.removeAttr("dir-a");//prevent endless loop
element.attr(attribute.type,"");
$compile(element)(scope);
}
}
})
.directive("dirB", function($compile){
return{
restrict:'A',
replace:true,
link: function(scope, element, attribute){
console.log("dirA");
}
}
})
.directive("dirC", function($compile){
return{
restrict:'A',
replace:true,
link: function(scope, element, attribute){
console.log("dirC");
}
}
});
使用<tr dir-a type='{{d.type}}' ng-repeat='d in data'/> 没有达到预期的效果。要么我给 dirA 的优先级为 0,它可以解析属性,但它的重复次数超过数组大小,或者我给它的优先级为 1000,它不能解析 b.type 并将其用作文字。
有人对此有解决方案吗?
【问题讨论】:
标签: javascript angularjs angularjs-directive angularjs-ng-repeat