我希望通过一个属性上的一些特定值来排序我的列表,然后在完成后再添加一些附加属性。
我的代码是:
<tr ng-repeat-start="subcontractor in trade.SubContractors | orderBy:['Status':'PREF','Status':'APPR','Status':'LOGD','Status':'NIU','-AverageScores.AverageScore','-ProjectCount','SubcontractorName']">
重要位(以及我无法工作的位)是:
'Status':'PREF','Status':'APPR','Status':'LOGD','Status':'NIU'
有没有办法以角度来做这件事?
答案 0 :(得分:2)
我会改为实现处理数据的处理程序。在它设置之前处理分包商,通过处理程序运行每个元素并分配&#34; sortValue&#34;每个人的财产。
然后使用sortValue属性调用orderBy。这样,您可以将排序数据与显示数据分离。虽然没有使用过滤器这样做,因为这将是非常昂贵的资源老虎机。
像
这样的东西 var statusSorting = ['PREF','APPR','LOGD','NIU'];
function sortContractors(models) {
var processed = [];
angular.forEach(models, function(model){
// logic to assign sortValue
var statusIndex = statusSorting.indexOf(model.status);
model.sortValue = statusIndex + 1;
});
return processed;
}
api.getData()
.then(function(data){
$scope.models = sortContractors(data);
});
// template
<tr ng-repeat="model in models | orderBy:'sortValue'">
然后,您可以通过更改阵列中的状态位置并订购desc / asc来控制优先级。
可替换地: orderBy multiple fields in Angular
<tr ng-repeat="model in models | orderBy:['sortValue', 'contractorName']">
答案 1 :(得分:0)
你的答案有一些非必需的部分,所以我已经调整它给我以下内容:
function getStatusSortOrder(subcontractors) {
var statusSorting = ['PREF', 'APPR', 'LOGD', 'NIU'];
angular.forEach(subcontractors, function (model) {
statusIndex = statusSorting.indexOf(model.Status);
model.StatusSortValue = statusIndex;
});
}