我在使用AngularJS中的orderBy
过滤器时遇到问题。这是我的设置:
<li ng-repeat="item in listItems.data | orderBy:order">
<a ng-click="getRelated(item._id)">{{ item.title }}</a>
</li>
控制器的一部分:
$scope.order = 'year';
$scope.listItems = $http.post($scope.url, {'filterType': 'abc', 'letter': $scope.params.letter});
$scope.setOrder = function(order) {
$scope.order = order;
}
最后我想使用“开关”来订购数据
<span class="sort--title">Sort by</span>
<a ng-class="{true:'selected', false:''}[order=='title']" href="" ng-click="setOrder('title')" class="sort--attribute">Title</a>
<a ng-class="{true:'selected', false:''}[order=='year']" href="" ng-click="setOrder('year')" class="sort--attribute">Year</a>
<a ng-class="{true:'selected', false:''}[order=='length']" href="" ng-click="setOrder('length')" class="sort--attribute">Length</a>
<a ng-class="{true:'selected', false:''}[order=='date_added']" href="" ng-click="setOrder('date_added')" class="sort--attribute">Date Added</a>
单击按钮时,列表未重新排序。
当我手动更改初始$scope.order
值时,列表由属性排序。此外ng-class
也已正确更新。我显然错过了一些东西!
答案 0 :(得分:12)
我认为你的想法不对。它确实有效。这是工作plunker。
你必须在其他地方出错。
app.js
var app = angular.module('ngApp', []);
app.controller('MainCtrl', ['$scope', function ($scope) {
'use strict';
$scope.friends = [
{name: 'John', phone: '555-1276'},
{name: 'Mary', phone: '800-BIG-MARY'},
{name: 'Mike', phone: '555-4321'},
{name: 'Adam', phone: '555-5678'},
{name: 'Julie', phone: '555-8765'}
];
$scope.setOrder = function (order) {
$scope.order = order;
};
}]);
主要HTML
<ul class="nav nav-pills">
<li ng-class="{'active': order=='name'}"><a href="#" ng-click="setOrder('name')">name</a></li>
<li ng-class="{'active': order=='phone'}"><a href="#" ng-click="setOrder('phone')">phone</a></li>
</ul>
<ul>
<li data-ng-repeat="friend in friends|orderBy:order">
<span class="name">{{friend.name}}</span>
<span class="phone">{{friend.phone}}</span>
</li>
</ul>
答案 1 :(得分:2)
我知道这是一个老问题,但是其他任何有同样问题的人都会觉得这很有用。 我遇到过同样的问题。 Clicks to anchor正在重新加载页面,因此,只要您单击任何表格标题,订单就会被设置为默认值。这也解释了为什么不将订单设置为默认全局固定它。
我用span元素替换了我的锚,它工作正常。