我在< tr>里面使用了ng-repeat.元素和指令.
HTML:
<tbody> <tr ng-repeat="row in rows" create-table> <td nowrap ng-repeat="value in row | reduceString>{{value}}</td> </tr> </tbody>
指示:
app.directive('createTable',function () { return { link: function (scope,element,attrs) { var contentTr = scope.$eval('"<tr ng-show="false"><td>test</td></tr>"'); $(contentTr).insertBefore(element); } } } );
虽然我可以添加一个新的< tr>每次迭代的元素,我都无法在将角色代码添加到DOM后执行(例如< tr>中的ng-show).我错过了一些明显的东西吗
您没有在您的孩子内部获得Angular绑定的原因是因为您缺少
compiling.当链接函数运行时,元素已经被编译,因此,Angular增强了.您所要做的就是手动编译您的内容.首先,不要评估您的模板,否则您将丢失绑定提示.
app.directive('createTable',function ($compile) { return { link: function (scope,attrs) { var contentTr = angular.element('<tr ng-show="false"><td>test</td></tr>'); contentTr.insertBefore(element); $compile(contentTr)(scope); } } });
另一个提示:你永远不会将你的元素包含在jQuery($)中.如果您的页面中有jQuery,则所有Angular元素都已经是jQuery增强元素.
最后,解决所需问题的正确方法是使用指令编译函数(读取‘Compilation process,and directive matching’ and ‘Compile function’)在编译之前修改元素.
作为最后的努力,阅读整个Directive guide,这是一个宝贵的资源.