【发布时间】:2015-08-21 04:14:15
【问题描述】:
数据
var data = {
"records": [
{
"name": "Spectrum Series",
"seriesid": "SpectrumSeries",
"book": [
{
"name": "White Curse",
"bookid": "WhiteCurse",
"image": "book1"
},
{
"name": "Blue Fox",
"bookid": "BlueFox",
"image": "book2"
}
]
… other series
}
控制器
dnleoApp.controller('BookCtrl', function ($scope, $routeParams) {
$scope.mybookid = $routeParams.bookid;
$scope.myseriesid = $routeParams.seriesid;
$scope.serieslist = data.records;
$scope.compareSeriesID = function($series) {
return $series.seriesid == $scope.myseriesid;
};
$scope.compareBookID = function($book) {
return $book.bookid == $scope.mybookid;
};
});
html
<div ng-repeat="series in serieslist | filter: compareSeriesID">
<ul ng-repeat="book in series.book | filter: compareBookID">
<li>{{book.name}}</li>
</ul>
</div>
我使用带有过滤器的嵌套 ng-repeat 使用来自 url 的 seriesid(唯一)和 bookid(唯一)过滤出一个系列的单本书。这种方法效果很好,但有更清洁的方法吗?
【问题讨论】:
-
是的,或者当然:而不是从后端加载所有系列和所有系列的所有书籍,而实际上你只关心一个系列的一本书,只加载那本书和那个来自后端的串行。即使使用您的策略,我也不会在视图中使用循环来显示信息。相反,我会在控制器中执行此操作,并将书籍和系列存储在视图的范围内。
-
感谢您的建议。按照您的建议,我使用嵌套的 forEach 在控制器中将其过滤掉。 :)
标签: angularjs filter nested ng-repeat