2014-10-09 75 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