2014-12-22 37 views
0

比方说,我有一个简单的循环,像如何避免在ng-repeat循环中呈现定义标记?

<div ng-repeat="item in items">{{item.foo}}<br></div> 

<div ng-repeat="item in items" ui-view="itemView"></div> 

我怎样才能避免渲染定义标签(div)获得:

Foo 1<br> 
Foo 2<br> 
Foo 3<br> 

代替:

<div>Foo 1<br></div> 
<div>Foo 2<br></div> 
<div>Foo 3<br></div> 

什么:我需要这即创建其中包装<tr>div表行是不允许的,是的,我知道,我可以使用<tr ng-repeat=...简单的情况下,反正我宁愿移动渲染tr标签为itemView以及(我有几个条件检查添加适当即CSS类,否则我就需要将这些类添加到行中的每个td

+0

为什么不是UL呢?这是允许在桌子内部的,你可以避免使用尴尬的
标签。我从来没有看到没有元素的ng-repeat的默认行为。你可以创建一个自定义指令来覆盖div – Fals

+0

@Fals'br'只是一个示例,'tr'是我目前的情况(也许'ul'会帮助 - 需要检查,但我真的会很高兴能避免使用嵌套标签来包装它,特别是当通过ui-view使用专用视图时。你能指出我如何为这个简单的场景创建自定义指令吗?(当然,作为一个答案,所以人们可以调高它) – biesior

回答

2

通过创建自定义d与irective 取代:真属性你可以用指令的模板

这里代替原有的HTML DIV从吴书启发的例子:

<div my-directive></div> 

app.directive('myDirective' function() { 
    return { 
     template: '<div>my directive without replacement</div> 
    } 
}); 

的HTML将保持并注入它里面的指令的模板,如:

<div my-directive> 
    <div>my directive without replacement</div> 
</div> 

但是,如果你设置“替换:真”,如:

app.directive('myDirective' function() { 
    return { 
     replace: true 
     template: '<div>my directive with replacement<div>' 
    } 
}); 

那么将只有该指令的模板,它取代了原来的

<div>my directive with replacement<div> 
+0

'replace:true'是我需要的,谢谢您 – biesior

2

您可以使用tbody

<tbody ng-repeat="item in items"> 
    <tr> 
    <td>{{ item.foo }}</td> 
    </tr> 
</tbody> 
+0

感谢你,你的解决方案是有用的,我会记住与表格的其他情况(TBH我确信该表只能包含一个'tbody',但规范允许重复它。 – biesior

+0

@biesior你可以在一个表中有多个tbody ,检查这个问题:http://stackoverflow.com/questions/4873701/are-html-tables-valid-if-there-are-multiple-tbody-tag-used –