我正在使用Ionic和Firebase构建应用。我有一个FirebaseArray,其中包含服务器端带日期的事件。
我希望能够按日期在客户端对这些事件进行排序。
目标是使用这些事件填充离子列表并按日期排序(今天,本周,之后)。
问题是在检索完所有事件后,我按日期在本地$ scope.arrays中对它们进行排序以填充离子列表。由于它不再是FirebaseArrays,因此数据和列表之间没有绑定。 (检索事件后工作,但如果我向FirebaseArray添加另一个事件,则它不会显示在离子列表中)。
有人可以帮我解决这个问题吗?我不需要一个实际的代码,但更多的是一种思考方式,也许还有我不知道的angularFire方法。
这是我正在使用的服务:
angular.module('starter.services', ['firebase'])
.factory('Soirees', function($firebase, $firebaseArray) {
var soireesRef = new Firebase('https://partey.firebaseio.com/soirees');
var soirees = $firebaseArray(soireesRef);
return {
all: function() {
return soirees;
}, add: function(soiree) {
soirees.$add(soiree);
}, remove: function(soiree) {
soiree.$remove(soiree);
}, get: function(soiree) {
return soirees.$getRecord(soiree);
}
};
});
这是我的控制器:
.controller('EventsCtrl', function($scope, $state, $ionicLoading, Soirees) {
$scope.soirees = Soirees.all();
$scope.soireeDay = [];
$scope.soireeWeek = [];
$scope.soireeFurther = [];
var currentDate = new Date();
$scope.soirees.$loaded().then(function() {
angular.forEach($scope.soirees, function(soiree){
if (Math.abs(currentDate - soiree.date) <= 1000*60*60*24) {
$scope.soireeDay.push(soiree);
} else if (Math.abs(currentDate - soiree.date) > 1000*60*60*24 && Math.abs(soiree.date - currentDate) <= 7*1000*60*60*24) {
$scope.soireeWeek.push(soiree);
} else {
$scope.soireeFurther.push(soiree);
}
})
$scope.soireeDayNumber = $scope.soireeDay.length;
$scope.soireeWeekNumber = $scope.soireeWeek.length;
$scope.soireeFurtherNumber = $scope.soireeFurther.length;
})
})
编辑: 我使用以下过滤器:
.filter('soireeDay', function() {
return function(item) {
var currentDate = new Date();
console.log(currentDate);
if (Math.abs(currentDate - item.date) <= 1000*60*60*24) {
return true
} else {
return false
}}
})
在我的html文件中:ng-repeat =&#34; soiree in soirees |滤波器:soireeDay&#34;
但它看起来没有调用liker过滤器。任何提示?
谢谢大家,
阿诺