对于属性上的特定值,重复排序

时间:2017-01-06 08:02:56

标签: angularjs

我希望通过一个属性上的一些特定值来排序我的列表,然后在完成后再添加一些附加属性。

我的代码是:

<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'

有没有办法以角度来做这件事?

2 个答案:

答案 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;
    });                
}