2014-12-22 31 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 –