Как управлять приоритетом angularJS при выполнении функций? - PullRequest
0 голосов
/ 29 мая 2018

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(), поэтому мои новые элементы находятся в нижней части моего списка, а не в тех позициях, которые я хочу.

Проблема

Я бы хотел запустить свое приложение следующим образом:

  1. заполнено $scope.events из Firebase
  2. Сортировать $scope.events по дате
  3. нг-повтор в HTML и заполнение $scope.spliceTab при срабатывании
  4. Наконец-то работает $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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...