我对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> {{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;
};
});
有任何请解决此问题或建议我解决方案吗?
答案 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);
}
});