2014-10-09 108 views
1

我想動態地向表中添加一行。我想在幾張表中重複使用該行。如何使用角度js將表格行添加爲模板

我試着用指令和ng-include這樣做,但這兩個選項都沒有按照我的預期工作。

基本上,這是我做的:

myapp.directive('myRow', function() { 
    return { 
     restrict : 'E', 
     replace : true, 
     scope : { mytitle : '@mytitle'}, 
     template : '<tr><td class="mystyle">{{mytitle}}</td></tr>' 
    } 
}); 

和HTML:

<table> 
    <tbody> 
     <tr><td>data</td></tr> 
     <my-row></my-row> 
    </tbody> 
</table> 

<tr>元素被繪製但外面結束DOM中<table>元素。

有沒有簡單的方法來包含使用angularjs的錶行?

+1

你有一個錯字''它必須是''你不能在模板2個元素。只要檢查一下你的控制檯,你就會得到各種各樣的線索。 http://plnkr.co/edit/pCNbci?p=preview – PSL 2014-10-09 20:31:15

+0

謝謝!我只是把它輸入到SO中。真實的代碼是正確的。 – chriskelly 2014-10-09 20:32:31

+0

這是因爲瀏覽器扔掉它。你不能有任何其他的東西作爲tbody的孩子。使你的指令屬性指令,你應該很好去。檢查我的演示。 – PSL 2014-10-09 20:33:23

回答

4

您的問題是,由於tbody中存在自定義元素my-row,因此您的html結構無效。你只能有tr在tbody裏面。因此,即使在angular有機會處理它之前,瀏覽器也會將您的指令元素從表中拋出。因此,當angular處理指令時,它會處理表外的元素。

爲了解決這個問題,請將您的指令更改爲受限元素的屬性限制指令。

.directive('myRow', function() { 
    return { 
     restrict : 'A', 
     replace : true, 
     scope : { mytitle : '@mytitle'}, 
     template : '<tr><td class="mystyle">{{mytitle}}<td></tr>' 
    } 

,並用它作爲: -

<table> 
    <tbody> 
     <tr><td>data</td></tr> 
     <tr my-row mytitle="Hello I am Title"></tr> 
    </tbody> 
    </table> 

Plnkr

+1

@chriskelly請參閱我的答案。我已經改過了。 – PSL 2014-10-09 20:53:13

+0

非常感謝!這是一個明確的解釋和解決方案。 – chriskelly 2014-10-09 21:30:42

+0

@chriskelly歡迎您... :) – PSL 2014-10-09 21:31:34