Angular.js ng-repeat across multiple elements
此问题已在此处部分解决:跨多个tr的Angular.js ng-repeat
但是,这实际上只是一个变通办法,实际上并不能解决核心问题,即:如何在没有包装的情况下跨多个元素使用ng-repeat?
例如,jquery.accordion要求您重复一个h3和div元素,那么用ng-repeat怎么做?
现在,我们对此提供了适当的支持,请参阅:
AngularJs提交
通过此更改,您现在可以执行以下操作:
1 2 3 4 5 6 7 8 | <table> <tr ng-repeat-start="item in list"> <td>I get repeated</td> </tr> <tr ng-repeat-end> <td>I also get repeated</td> </tr> </table> |
- 这样完美!
- 万一它对别人有帮助...在angularjs.org网站上,无论是稳定版本还是不稳定版本的AngularJs都没有此功能。为了使此工作正常进行,我必须安装Angular.js的最新功能–此处的操作方法:stackoverflow.com/questions/17501052/
- 正如@geoidesic所建议的那样,此代码在1.1.5之后着陆,因此请在1.1.6(或很有可能是1.2.0)中注意它
- 只需添加ng-repeat-start当前属于不稳定版本(aug 13)
-
如果第二个
本身是重复的"嵌套"怎么办?例如: tr> tr> - @安德烈不要那样做。而是在您的第一个ng-repeat中创建一个新指令。
要在一个表中的两个以上ng-repeat级别上回答上述安德烈的问题,可以使用多个ng-repeat-start来完成此操作。
1
2
3
4
5
6
7
8
9
10
11<tr ng-repeat-start="items in list">
<td>{{items.title}}</td>
</tr>
<tr ng-repeat-start="item in items">
<td>{{item.subtitle}}</td>
</tr>
<tr ng-repeat-end ng-repeat="value in item.values">
<td>{{value.col1}}</td>
<td>{{value.col2}}</td>
</tr>
<tr ng-repeat-end></tr>这是一个小例子
- 尝试进行这项工作,但我只得到:未终止的属性,找到了ng-repeat-start,但是没有找到匹配的ng-repeat-end。这不再有效吗?使用角度1.5
更新:此答案已过时。 请参阅@IgorMinar答案,并使用标准的
ng-repeat-start 和ng-repeat-end 指令。有两个选项:
第一种选择是创建指令,该指令将呈现多个标签并替换源标签(jsfiddle)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22angular.module('components').directive('multi', function ($compile) {
return {
restrict: 'A',
scope : {
first : '=',
last : '=',
},
terminal:true,
link: function (scope, element, attrs) {
var tmpl = '', arr = [0,1,2,3]
// this is instead of your repeater
for (var i in arr) {
tmpl +='another div'
}
var newElement = angular.element(tmpl);
$compile(newElement)(scope);
element.replaceWith(newElement);
}
})第二种选择是使用angular的更新源代码,该代码启用注释样式ngRepeat指令(plnkr)
1
2
3
4
5
6
7
8
9
10
11<body ng-controller="MainCtrl">
<!-- directive: ng-repeat i in arr -->
{{i}}
{{ 'foo' }}
<!-- /ng-repeat -->
{{ arr }}
add
</body>s>
- 听起来不错。我什么都不懂!在您的第一个示例中,我没有看到ng-repeat,所以我不确定它的相关性(我看了小提琴,但它是如此的复杂,我无法弄清它的头或尾)。您的第二个例子对我来说只是个傻瓜。
- @ user2448430我更新了示例,现在应该更加直观了。
- 第一个示例没有解决问题,因为您仍然会在两个元素周围得到一个重复的包装器...即,包含ng-repeat指令的元素也被重复了–我只希望重复内部元素。
- 您可以为第二个示例pls更新plnkr吗?
- @ user2448430只需克隆plnkr并粘贴此代码
-
@ user2448430不,你没有。
element.replaceWith(newElement); 将用您需要的包装标签替换。您也可以在指令中加入循环,并在tmpl中添加所需数量的标签。 - 我不同意。对其进行了尝试,并重复了包含ng-repeat指令的元素。同样,第二个示例实际上并不起作用。 div不会重复,只是在plnkr示例中输出的数组。
-
我喜欢这种语法。这说得通。我尝试在这里使用它:plnkr.co/edit/o8uUncDctntXOynYAC3V?p=preview,但它看起来像在渲染额外的标签,如下所示: span>
- @JoshGough可以,所以我最终在CSS中添加了规则以隐藏这些跨度。
- 我的示例bresleveloper.blogspot.co.il/2013/08/
- @bresleveloper,您参加聚会有点晚了,角度在主分支中包括
ng-repeat-start 和ng-repeat-end ,所以现在更容易了。- thx vittore,但目前老板不想要不稳定的版本,所以病了必须w8。顺便说一句,我有一个replaceWith问题,这似乎是一个JQuery问题,而不是一个有角的问题,我用空/追加替换它
- @bresleveloper很好,已经稳定了好一阵子了。
Copyright © 码农家园 联系:[email protected]