如何在函数执行中管理angularJS优先级?

时间:2018-05-29 11:10:07

标签: javascript angularjs

上下文

$scope.getAllEvents()在最后10个事件中从Firebase数据库获取一个数组并将其放入$scope.events数组中。然后该函数按日期排序$scope.events。我正在初始化$scope.spliceTab并致电$scope.spliceFunc()

每次ng-repeat $scope.counterPub()是5的倍数时,HTML都会触发

$index。该函数存储在$scope.spliceTab $index的每个值中触发。基本上它是一个选项卡,用于注册未来的新项目位置。然后我删除双打并将结果保存在$scope.result

最后,$scope.spliceFunc()正在$scope.result内阅读,并插入$scope.events个位置存储到$scope.result的新项目。

运行

在我的应用开始时,$scope.events已填满,但$scope.result的{​​{1}}仍为空。当我使用无限滚动来加载10个以上的事件时,它正在工作,但$scope.spliceFunc()算法在$scope.events.sort()之前正在工作,因此我的新项目位于列表的底部而不是位置我想要。

问题

我想以这种方式运行我的应用程序:

  1. 从Firebase填写$scope.spliceFunc()
  2. 按日期排序$scope.events
  3. ng-repeat in HTML并在触发时填充$scope.events
  4. 最后在已排序的数组$scope.spliceTab
  5. 上运行$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"
        }]);
      });
    };

0 个答案:

没有答案