我正在尝试在单击时过滤项目列表(从 JSON 中获取)。我从服务器中提取一次数据,然后想使用 Angular 过滤/排序元素。
这是我的插件: http ://plnkr.co/edit/glSz1qytmdZ9BQfGbmVo?p=preview
- 选项卡- 我如何过滤/排序 onclick 项目?“最近”将按日期排序,“热门”将按观看次数排序。
- 类别——我正在使用 ng-click 来获取类别值,但不确定如何动态更新过滤器(使用通过 onclick 传递的值)。
谢谢
我正在尝试在单击时过滤项目列表(从 JSON 中获取)。我从服务器中提取一次数据,然后想使用 Angular 过滤/排序元素。
这是我的插件: http ://plnkr.co/edit/glSz1qytmdZ9BQfGbmVo?p=preview
谢谢
我会将整个功能包装在父控制器中,并在该父控制器中使用选项卡更改和类别选择功能(子范围将继承此功能),以便可以为过滤器和排序方式共享范围变量:
控制器继承阅读资料:http: //docs.angularjs.org/guide/dev_guide.mvc.understanding_controller
演示: http ://plnkr.co/edit/rh3wGYhuoHSHJEa4PoQi?p=preview
HTML:
<div ng-controller="ListController">
<div class="categories" ng-controller="CategoryController">
<ul ng-repeat="category in categories">
<li ng-click="sendCategory(category)">{{category.name}}</li>
</ul>
</div>
<div class="tabs" ng-controller="tabsController">
<ul>
<li ng-click="tab(1)">Recent items</li>
<li ng-click="tab(2)">Popular items</li>
</ul>
</div>
<div class="container">
<div class="left" ng-controller="ItemController">
<div class="itemList">
<div class="item" ng-repeat="item in items | filter:search | orderBy:sort">
<h3 ng-click="viewDetail(item)">{{item.title}} - {{item.date}}</h3>
<p>{{item.description}}</p>
<a ng-click="viewDetail(item)">View full item details</a>
</div>
</div>
</div>
</div>
</div>
这是父控制器:
myApp.controller('ListController', function($scope, $route, $location, $http, Categories){
$scope.sort = function(item) {
if ( $scope.orderProp == 'date') {
return new Date(item.date);
}
return item[$scope.orderProp];
}
$scope.sendCategory = function(category) {
// How can I pass this value to ItemController?
$scope.search =category.name;
};
$scope.orderProp='date';
$scope.tab = function (tabIndex) {
//Sort by date
if (tabIndex == 1){
//alert(tabIndex);
$scope.orderProp='date';
}
//Sort by views
if (tabIndex == 2){
$scope.orderProp = 'views';
}
};
})
** 更新 **
我已经更新了控制器以正确排序日期,因为它们需要首先被解析。