我正在尝试使用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方法?
答案 0 :(得分:0)
要保留TODO的顺序,您可以添加一个名为priority
的属性。
当TODO被拖动/向上移动优先级列表时,您应该重新设置TODO的优先级值并保存它们,并按模板中的该属性对它们进行排序。
答案 1 :(得分:0)
好的,所以像splice(),push(),pop(),shift(),unshift()和reverse()这样的数组方法会导致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
}
};