Context
$scope.getAllEvents()
получает массив из базы данных Firebase в течение 10 последних событий и помещает его в массив $scope.events
.Затем функция сортировки по дате $scope.events
.Я инициализирую $scope.spliceTab
и звоню $scope.spliceFunc()
.
$scope.counterPub()
запускается в HTML каждый раз, когда ng-repeat $index
кратно 5. Функция сохраняет в $scope.spliceTab
каждое значение $index
, которое было запущено.По сути, это вкладка, где регистрируются будущие местоположения новых предметов.Затем я удаляю дубликаты и сохраняю результаты в $scope.result
.
Наконец, $scope.spliceFunc()
читает внутри $scope.result
, и вставляю в $scope.events
новые элементы, где позиции сохраняются в $scope.result
.
Запуск
В начале моего приложения $scope.events
заполняется, но $scope.result
из $scope.spliceFunc()
остается пустым.Когда я использую бесконечную прокрутку для загрузки еще 10 событий, он работает, но алгоритм $scope.events.sort()
работает до $scope.spliceFunc()
, поэтому мои новые элементы находятся в нижней части моего списка, а не в тех позициях, которые я хочу.
Проблема
Я бы хотел запустить свое приложение следующим образом:
- заполнено
$scope.events
из Firebase - Сортировать
$scope.events
по дате - нг-повтор в HTML и заполнение
$scope.spliceTab
при срабатывании - Наконец-то работает
$scope.spliceFunc()
в уже отсортированном массиве $scope.events
Что выдумаю, это возможно?
// FUNCTION TO GET EVENTS
$scope.getAllEvents = function() {
if ($scope.listSiz === undefined) {
$scope.listSiz = 10;
}
var ref = firebase.database().ref().child("events");
$scope.events = $firebaseArray(ref.orderByChild('endDate').limitToFirst($scope.listSiz));
$scope.events.$loaded().then(function()
{
$scope.events.sort(function compareNumbers(y, x) {
var date1 = new Date(x.endDate);
var date2 = new Date(y.endDate);
return date1 - date2;
});
if ($scope.listSiz === 30) {
$scope.noMoreItemsAvailable = true;
}
$scope.spliceTab = [];
$scope.spliceFunc();
});
};
// FUNCTION TRIGGERED IN HTML
$scope.counterPub = function($index) {
var modulo = $index % 5;
if (modulo === 0) {
$scope.spliceTab.push($index);
// Delete doubles
$scope.result = [];
$scope.spliceTab.forEach(function(item) {
if ($scope.result.indexOf(item) < 0) {
$scope.result.push(item);
}
});
return true;
} else {
return false;
}
};
// FUNCTION SPLICE
$scope.spliceFunc = function() {
// console.log("************* TAB ****************** =", $scope.result);
angular.forEach($scope.result, function(value) {
$scope.events.splice(value, 0, [{
name: "toto"
}]);
});
};
<ion-view>
<ion-content>
<ion-list ng-controller="MCtrl">
<ion-item ng-repeat="e in events">
<!-- IF ADDS -->
<div ng-if="counterPub($index) === true">
Hello world !
</div>
<!-- -->
<div>
<img data-ng-src="{{ ::e.creatorAvatar }}">
</div>
</ion-item>
</ion-list>
</ion-content>
</ion-view>