使用相同的函数 AngularJS 进行多表排序
multiple table sort using same function angularjs
我在Angularjs中是一个平庸的人,需要帮助。我有两个具有相同标题的表,表中的数据可能不同,也可能不同。我需要根据单击标题对数据进行排序。我对两个表使用相同的排序函数。问题是当我单击一个标题时,两个表上的数据都会被排序。我只需要对我单击其标题的表格进行排序。请帮忙。
这是代码。
<body ng-app="orderByExample">
<div ng-controller="ExampleController">
<pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre>
<hr/>
<button ng-click="predicate=''">Set to unsorted</button>
<table class="friend">
<tr>
<th>
<button ng-click="order('name')">Name</button>
<span ng-show="predicate === 'name'" ng-class="{reverse:reverse}"></span>
</th>
<th>
<button ng-click="order('phone')">Phone Number</button>
<span class="sortorder" ng-show="predicate === 'phone'" ng-class="{reverse:reverse}"></span>
</th>
<th>
<button ng-click="order('age')">Age</button>
<span class="sortorder" ng-show="predicate === 'age'" ng-class="{reverse:reverse}"></span>
</th>
</tr>
<tr ng-repeat="friend in friends | orderBy:predicate:reverse">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
<td>{{friend.age}}</td>
</tr>
</table>
<table class="friend">
<tr>
<th>
<button ng-click="order('name')">Name</button>
<span ng-show="predicate === 'name'" ng-class="{reverse:reverse}"></span>
</th>
<th>
<button ng-click="order('phone')">Phone Number</button>
<span class="sortorder" ng-show="predicate === 'phone'" ng-class="{reverse:reverse}"></span>
</th>
<th>
<button ng-click="order('age')">Age</button>
<span class="sortorder" ng-show="predicate === 'age'" ng-class="{reverse:reverse}"></span>
</th>
</tr>
<tr ng-repeat="friend in friends | orderBy:predicate:reverse">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
<td>{{friend.age}}</td>
</tr>
</table>
</div>
</body>
(function(angular) {
'use strict';
angular.module('orderByExample', [])
.controller('ExampleController', ['$scope', function($scope) {
$scope.friends =
[{name:'John', phone:'555-1212', age:10},
{name:'Mary', phone:'555-9876', age:19},
{name:'Mike', phone:'555-4321', age:21},
{name:'Adam', phone:'555-5678', age:35},
{name:'Julie', phone:'555-8765', age:29}];
$scope.predicate = 'age';
$scope.reverse = true;
$scope.order = function(predicate) {
$scope.reverse = ($scope.predicate === predicate) ? !$scope.reverse : false;
$scope.predicate = predicate;
};
}])
.factory("")
})(window.angular);
两个表对相同的变量进行排序,因此它们的显示自然是相同的。
我会对表标识符进行排序和谓词子级 - 我们将在这里使用 t1 和 t2,但请在您自己的代码中使用更可识别的东西。
$scope.t1 = { predicate: 'age', reverse: true};
$scope.t2 = { predicate: 'age', reverse: true};
现在,order 函数需要采用该标识符:
$scope.order = function(predicate, tableId) {
$scope[tableId].reverse = ($scope[tableId].predicate === predicate) ? !$scope[tableId].reverse : false;
$scope[tableId].predicate = predicate;
};
最后,排序函数和转发器需要使用它们的表 ID:
<table class="friend">
<tr>
<th>
<button ng-click="order('name','t1')">Name</button>
<span ng-show="t1.predicate === 'name'" ng-class="{reverse:t1.reverse}"></span>
</th>
<th>
<button ng-click="order('phone','t1')">Phone Number</button>
<span class="sortorder" ng-show="t1.predicate === 'phone'" ng-class="{reverse:t1.reverse}"></span>
</th>
<th>
<button ng-click="order('age','t1')">Age</button>
<span class="sortorder" ng-show="t1.predicate === 'age'" ng-class="{reverse:t1.reverse}"></span>
</th>
</tr>
<tr ng-repeat="friend in friends | orderBy:t1.predicate:t1.reverse">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
<td>{{friend.age}}</td>
</tr>
</table>
表 2 的想法相同
如果您需要扩展,您可能希望使用某种中继器而不是我刚刚所做的。我把这个练习留给你。
相关文章:
- AngularJs对所有页面中的所有记录进行排序
- AngularJS:删除重复的对象并按值对数组进行重新排序
- 根据输入文本按元素排序,AngularJS
- AngularJS剑道网格绑定到angular服务webapi-当使用[fromuri]进行解析时,排序总是为null
- 在angularjs或javascript中对hashmap进行排序
- AngularJs orderby 过滤器无法正确排序数据
- 在angularjs ng-repeat指令中对对象进行排序
- AngularJS/Javascript:使用运算符对字符串进行排序
- AngularJS使用对象属性排序多个对象数组
- 根据angularjs中画布上的位置对列表项进行排序
- 如何使用AngularJs或Javascript对数组进行排序
- 在AngularJS中,如何指定辅助排序
- 如何在AngularJS中根据子结果集排序结果
- 如何使用AngularJS而不是在查询子句中根据两列的差异对表进行排序
- 重新排序angularjs ngRepeat与后续数据结果
- AngularJS:使用orderBy进行过滤和排序
- AngularJS typeahead添加了按函数自定义排序
- 迁移到AngularJS 1.2会破坏可排序包装器指令
- 嵌套数据时的AngularJs表排序
- 有条件地排序 - AngularJs