我遇到了这种情况,我需要使用ng-repeat-start
/ ng-repeat-end
重复HTML代码块,但有点抱怨:
错误:[$ compile:uterdir]未终止的属性,找到' ng-repeat-start'但没有匹配的' ng-repeat-end'找到。
我找到了一种解决方法,它可能对遇到这种情况的人有用。我也想知道你的想法。这是一个错误吗?我应该避免这种做法?我使用的是Angular v1.3.5,代码就是这样:
<table>
<thead>
...
<tr ng-repeat-start="a in b">
...
</tr>
...
</thead>
<tbody>
...
</tbody>
<thead>
...
<tr ng-repeat-end>
...
</tr>
...
</thead>
</table>
&#13;
问题似乎是ng-repeat-end
不在同一个HTML标记块中(这里是thead
所在的第一个ng-repeat-start
。
我找到了一个使用以下代码的解决方法:
<table>
<thead>
...
</thead>
<thead ng-repeat-start="a in b">
<tr>
...
</tr>
...
</thead>
<tbody>
...
</tbody>
<thead>
...
</thead>
<thead ng-repeat-end>
<tr>
...
</tr>
...
</thead>
</table>
&#13;
这样我就会将ng-repeat-start
和ng-repeat-end
带到同一个标记table
。
答案 0 :(得分:1)
ngRepeat是一个multiElement指令。
如果查看$compile source,可以看到angularJs将遍历下一个兄弟节点:
/**
* Given a node with an directive-start it collects all of the siblings until it finds
* directive-end.
* @param node
* @param attrStart
* @param attrEnd
* @returns {*}
*/
function groupScan(node, attrStart, attrEnd) {
var nodes = [];
var depth = 0;
if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) {
do {
if (!node) {
throw $compileMinErr('uterdir',
"Unterminated attribute, found '{0}' but no matching '{1}' found.",
attrStart, attrEnd);
}
if (node.nodeType == NODE_TYPE_ELEMENT) {
if (node.hasAttribute(attrStart)) depth++;
if (node.hasAttribute(attrEnd)) depth--;
}
nodes.push(node);
node = node.nextSibling;
} while (depth > 0);
} else {
nodes.push(node);
}
return jqLite(nodes);
}
在个人帐户中,尝试将此与非兄弟元素一起使用会让人感觉非常不自然。