angularjs - Angular 指令包括创建“巫毒模式?”
问题描述
我有一个指令,它在一个看起来像这样的表中创建一行:
angular.module("myApp").directive('personRow', function() {
return {
template: "<tr><td>{{person.name}}</td><td>{{person.age}}</td></tr>"
}
});
但是,当我尝试将此指令与 ng-repeat 一起用于集合时,我得到了一些非常奇怪的结果——这是在我的页面中:
<div ng-app="myApp" ng-controller="myCtrl">
<p>Looping wirth ng-repeat:</p>
<table>
<tr><td>foo</td></tr>
<person-row ng-repeat="person in people"></person-row>
<tr></tr>
</table>
</div>
这是输出:
Looping with ng-repeat:
John32Mary45
foo
所有的表格元素似乎都在指令之后移动了,并且在它之上不知何故,指令之前的“foo”行也被移动到了它之后。
页面上生成的 html 如下所示:
<div ng-app="myApp" ng-controller="myCtrl" class="ng-scope">
<p>Looping wirth ng-repeat:</p>
<!-- ngRepeat: person in people --><person-row ng-repeat="person in people" class="ng-binding ng-scope">John32</person-row><!-- end ngRepeat: person in people --><person-row ng-repeat="person in people" class="ng-binding ng-scope">Mary45</person-row><!-- end ngRepeat: person in people --><table>
<tbody><tr><td>foo</td></tr>
<tr></tr>
</tbody></table>
</div>
无法弄清楚这里发生了什么...
这是一个带有完整代码的插件: https ://plnkr.co/edit/ia2Um68YF4OzWWsiIGKL?p=info
解决方案
多一点研究,发现这个问题可以通过使用指令作为 tr 元素的属性来解决,而不是在指令中包含 tr 即使用
<tr person-row>..</tr>
代替
<person-row></person-row>
推荐阅读
- magento2 - 在magento 2的app/design中覆盖app/code html文件
- visual-studio - MSBuild:仅在发生更改时有条件地运行 webpack
- ruby-on-rails - PostgreSQL on Rails 的最大连接年龄
- j - 尝试安装jqt,它说链接组已损坏
- javascript - 在哪里可以找到带有 solvePnP 的 opencv.js 或如何构建它?
- azure-storage - 从 Runbook 获取存储帐户中的所有 blob 名称
- c++ - 使用环境变量的配置文件
- html - 显示 3 个单独的按钮,其中 1 跨越它旁边的两个的高度
- python - 为什么我会收到此错误“无法解压缩不可迭代的 NoneType 对象”?
- dax - 将 DAX if 语句转换为 Power Query(或 M)?