如果属性相同,我试图使用ng-repeat
来重复其余的数据。这听起来可能不太清楚,所以这里有一个例子。
JSON示例,它是一个图书数组
[{"Genre":Sci-fic,"Name":"Bookname1"},
{"Genre":Sci-fic,"Name":"Bookname2"},
{"Genre":Non sci-fic,"Name":"Bookname3"},
{"Genre":Non sci-fic,"Name":"Bookname4"}]
因此,如果图书属于同一类型,那么我们将使用genre type作为手风琴的标题,并列出类型为该类型的图书的其余属性,但不重复标题。我遇到的问题是,由于json对象数组来自数据模型,如果不重复类型类型,我就无法真正过滤类型。
这是我想把标题作为Book的地方。在该手风琴组中,将包含以类型为标题的所有图书的列表。
http://plnkr.co/edit/PwIrOAIT3RRaE2ijzGZb?p =预览
我还没能解决这个问题…我能想到的最好的解决方案是在将该模型添加到您的作用域之前,简单地删除重复的模型…
使用jsFiddle的例子…
http://jsfiddle.net/mcpDESIGNS/Uz5tM/1/
var books = [
{"Genre":"Sci-fic", "Name":"Bookname1"},
{"Genre":"Sci-fic", "Name":"Bookname2"},
{"Genre":"Non sci-fic", "Name":"Bookname3"},
{"Genre":"Non sci-fic", "Name":"Bookname4"}
];
var unique = [],
blocked = [];
unique.push(books[0]);
blocked.push(books[0].Genre);
for (var i = 1; i < books.length; i++) {
if (blocked.indexOf(books[i].Genre) <= -1) {
unique.push(books[i]);
blocked.push(books[i].Genre);
}
}
$scope.Books = books;
// [{Genre: "Sci-fic", Name: "Bookname1"},
// { Genre: "Non sci-fic", Name: "Bookname3" }];
这是因为你在generes中有重复的值使用track by
<div ng-repeat="genere in generes track by $index"></div>
或者如果你想按类型对你的模型进行分组你可以使用下划线。js请参阅小提琴
视图:
<div ng-app="app">
<div ng-controller="ParentCtrl">
<ul class="about-tab-titles" close-others="oneAtATime">
<li ng-repeat="(key ,book) in model">
{{key}}
<ul>
<li ng-repeat="b in book ">{{b.Name}}</li>
</ul>
</li>
</ul>
</div>
</div>
JS:
angular.module('app', [])
function ParentCtrl($scope) {
var books = [{
"Genre": "Sci-fic",
"Name": "Bookname1"
}, {
"Genre": "Sci-fic",
"Name": "Bookname2"
}, {
"Genre": "Non sci-fic",
"Name": "Bookname3"
}, {
"Genre": "Non sci-fic",
"Name": "Bookname4"
}];
$scope.model = _.groupBy(books, 'Genre');
}
所以我找到了一个适合我的解决方案。我在嵌套的ng-repeat中使用了这个AngularJs过滤器。我对我的数据模型做了一些改变,但这是相同的想法。