angularjs – 使用ng-transclude在表中似乎不能正常工作
发布时间:2020-12-17 09:27:19 所属栏目:安全 来源:网络整理
导读:我创建了一个简单的指令,用于在 td中显示一些文本.当没有表数据(即“找不到结果”)占用表的整个行时.之前我刚刚在 td中有静态文本但是现在我想要把任何DOM放在它里面.我尝试添加ng-transclude到我的指令,但现在它是以奇怪的方式渲染元素. 这是我的指令: app
我创建了一个简单的指令,用于在< td>中显示一些文本.当没有表数据(即“找不到结果”)占用表的整个行时.之前我刚刚在< td>中有静态文本但是现在我想要把任何DOM放在它里面.我尝试添加ng-transclude到我的指令,但现在它是以奇怪的方式渲染元素.
这是我的指令: app.directive('skNoResult',['$rootScope',function () { return { restrict: 'A',replace: true,transclude: true,template: '<tr ng-if="!hasResult"><td class="left" colspan="{{ colSpan }}"><ng-transclude></ng-transclude></td></tr>',link: function (scope,elem,attrs,ctrl) { var span = angular.element(elem).parents('tbody').siblings('thead').find('tr').children().length; scope.colSpan = span; scope.$watch(attrs.skNoResult,function (list) { if (list.length) { scope.hasResult = true; } else { scope.hasResult = false; } }); } }; }]); 它基本上只是跟踪数据集(数组),并检查长度以查看是否有任何数据.如果那里我们用ngIf显示这个行. 我的html看起来像这样 <tr sk-no-result="model.dataSet">Here is my text I want to transclude into my directive</tr> 问题是,被转录的文本被插入到DOM中,只是一个textNode,并且出现在< table>而不是内部.任何想法为什么会发生这种情况?
我相信你看到这个的原因不是因为Angular,而是浏览器看到它是无效的< tr>因为它期待< td>因此它会将此内容移动到表格之上,之后角度甚至有机会运行并进行交叉.您可以通过删除任何角色代码轻松测试,只需离开HTML,您会注意到结果完全相同.
以下是您可以使用的解决方法: <tr ng-if="!model.dataSet.length"> <td sk-no-result="model.dataSet">Here is my text I want to transclude into my directive</td> </tr> 和指令: app.directive('skNoResult',function () { return { restrict: 'A',template: '<td class="left" colspan="{{ colSpan }}"><div ng-transclude></div></td>',attrs) { var span = angular.element(elem).parents('tbody').siblings('thead').find('tr').children().length; scope.colSpan = span; } }; }]) 注意,ngTransclude的元素使用,即< ng-transclude>< / ng-transclude>只能从版本1.3.0-beta.16及更高版本获得.如果您使用的是1.2版本,则需要使用上述示例中的属性使用情况< divng-transclude>< / div> 这是一个工作demo. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |