如何使用AngularFire将对象移动到数组的顶部?

时间:2015-06-19 13:15:32

标签: javascript firebase angularfire

我正在尝试使用AngularFire将对象移动到数组的顶部。

我在Firebase中的数组与此类似:

$scope.todos = [
    {title:"Work out", timetag:"new Date()", done: false },
    {title:"Home work", timetag:"new Date()", done: false }
];

我创建了一个使用vanilla javascript的函数,该函数将对象存储到变量中。该函数从要移动到阵列开头的数组中删除对象。然后,该函数将存储的对象替换为变量到数组的开头。

这是我的代码:

$scope.moveUpPriority = function($index){
    var toMove = $scope.todos[$index];
    delete $scope.todos[$index];
    $scope.todos.splice(0,0, toMove);
    $scope.todos.$save();
  };

此代码段几乎完全按照我想要的方式运行。当我在我的todo列表上运行它时,它将todo任务移动到阵列上。但是,当我刷新页面时,它并没有坚持下去。

将这种类型的javascript代码完全保存或设置到我的Firebase后端有哪些适当的AngularFire方法?

2 个答案:

答案 0 :(得分:0)

要保留TODO的顺序,您可以添加一个名为priority的属性。

当TODO被拖动/向上移动优先级列表时,您应该重新设置TODO的优先级值并保存它们,并按模板中的该属性对它们进行排序。

答案 1 :(得分:0)

好的,所以像splice(),push(),pop(),shift(),unshift()和reverse()这样的数组方法会导致Firebase数组中断。

  • 所以我的工作是使用标准的Javascript Array方法编辑/更改数组。
  • 然后我将本地(已编辑)状态数组的副本存储到变量中。
  • 然后我删除了Firebase数组。
  • 然后我将本地数组的键推送到Firebase。

以下是代码:

$scope.moveUpPriority = function($index){
    var toMove = $scope.todos[$index]; //save copy of $index todo

   $scope.todos.splice($index,1); //removes item at $index 
   $scope.todos.splice(0,0, toMove); //adds item toMove to the start of array

   var backup = $scope.todos; //copy back up array


   for(var b = 0; b<= $scope.todos.length; b++){
    $scope.todos.$remove($scope.todos[b]); //remove items from array
   }

   for(var i = 0; i<= backup.length; i++){
    $scope.todos.$add(backup[i]); // add items from back up array
   }
 };