AngularJS中的问题显示/订购特定条件的数据

时间:2015-08-10 06:47:51

标签: javascript angularjs ionic-framework

我对AngularJS中某些条件的过滤数据有疑问。我想首先显示/排序所有填充的字段,然后最后显示所有具有数据的字段(“ - ”)。由于过滤器在ng-repeat内部,所以我想只运行一次过滤器,这是我认为不可能使用'脏检查'作为AngularJS。

'appStatusData'= 
             Data-A: "0.000"
             Data-Date: "2014-09-07 00:00:00.0"
             Data-B: "111"
             Data-C: "-"
             Data-D: "0517"
             Data-E: "462.000"
             Data-F: "-"
             Data-G: "No"
             Data-H: "-"

预期产出:

            Data-A: "0.000"
            Data-Date: "2014-09-07 00:00:00.0"
            Data-B: "111"
            Data-D: "0517"
            Data-E: "462.000"
            Data-G: "No"
            Data-C: "-"
            Data-F: "-"
            Data-H: "-"

<ion-view view-title="Application Status" name="permit-view">
<ion-header-bar class="bar-stable bar-subheader">
    <div class="title" style="color: #2A4660"><u>Header</u></div>
</ion-header-bar>
<ion-content class="padding" has-subheader=true>
    <ion-list>
        <ion-item class="item" ng-repeat="(key, val) in (appStatusData | showDecimalData | showDataByNotNullFirst ) ">
            <b>{{key}} </b>&nbsp;&nbsp;&nbsp;{{val}}
        </ion-item>
    </ion-list>
    <button class="button button-full button-dark" ng-click="showList();">Show Details</button>
</ion-content>

使用Javascript: 我正在这样做,因为'present'和'empty'数组未定义,所以根本不起作用。

angular.module('myApp')
.filter('showDataByNotNullFirst', function($filter) {
    return function(array) {
        var present, empty, result;
        //console.log('Key is: ' + key + ' Value is: ' + value);
        $filter('filter')(array, function(key, val) {
            if (val != '-') {
                present[key] = val;
            } else {
                empty[key] = val;
            }
        });
        result = present.concat(empty);
        return result;
    };
});

有任何请解决此问题或建议我解决方案吗?

1 个答案:

答案 0 :(得分:0)

我会在控制器中解决这个问题。

首先,您需要将对象属性转换为数组。

var statusArr = [],
sortedArr = [];


// Loop over every property inside your object
for(var propertyName in appStatusData) {
    var obj = {
        name: propertyName,
        value: m[propertyName]   
    }
    statusArr.push(obj);
}

现在让我们遍历statusArr数组中的每个项目。 如果项目=&#39; - &#39;,则在新数组中推送。如果它不是&#39; - &#39;,取消它在数组的开头。

有关JavaScript Array methods的更多信息。

angular.forEach(statusArr, function (s) {
    if (s === '-') {
        // add it to the 'right' side of the array
        sortedArr.push(s);
    } else {
        // add it on the 'left' side of the array
        sortedArr.unshift(s);
    }
});