重新排序 Angular JS 数组项在第一项上中断?
Reordering Angular JS array items breaking on first item?
我想我这里有语法错误。
我的控制器中有一组 4 个函数:添加新项、删除当前项、在数组中向后(向上)移动项、在数组中向前(向下)移动项。
他们都在工作除了当要向下移动的项目是第一个对象时
vm.maxChoices = 6;
vm.addNewChoice = function(arr) {
var newItemNo = arr.length + 1;
arr.push({
'id': 'choice' + newItemNo
});
};
vm.deleteChoice = function(arr, index) {
arr.splice(index, index);
};
vm.moveUpChoice = function(arr, index) {
var currItem = index;
if (currItem>0) {
arr.splice(currItem-1,0, arr.splice(currItem, currItem)[0]);
}
};
vm.moveDownChoice = function(arr, index) {
var currItem = index;
var newPosition = index+1;
if (currItem < arr.length) {
arr.splice(newPosition,0, arr.splice(currItem, currItem)[0]);
}
};
vm.showAddChoice = function(choice,arr) {
return arr.length !== vm.maxChoices;
};
我对 moveDownChoice 做错了什么?
工作示例:http://plnkr.co/edit/WPdnmYbDSXC0LsbeMduM?p=preview
尝试创建 3 或 4 行,将数据放入字段中以查看其移动。您可以将 #2 移动到 #3 等,但是如果您尝试将第一个向下移动,它会创建一个新项目而不是移动到 #2。
在您的 moveUpChoice 和 moveDownChoice 函数中,您遇到了同样的错误。
arr.splice(currItem, currItem)[0]
应该是:
arr.splice(currItem, 1)[0]
moveUpChoice
和 moveDownChoice
的代码都不正确。两者都没有您期望的那样工作。
.splice()
函数有3个参数。 position
、numToRemove
和 itemsToInsert
。它 returns 已删除项目的数组。
所以在你的代码中,你告诉它去项目的位置,删除项目的项目数量,然后传递第一个要添加到新位置的项目。在第一行中,您将删除 0 个项目(基于 0 的数组),但在其他行中,您将删除比实际添加到新位置的数据更多的数据。向上箭头将使倒数第二个项目从数组中消失。
相反,尝试 arr.splice(newPosition,0, arr.splice(currItem, 1)[0]);
我想我这里有语法错误。
我的控制器中有一组 4 个函数:添加新项、删除当前项、在数组中向后(向上)移动项、在数组中向前(向下)移动项。
他们都在工作除了当要向下移动的项目是第一个对象时
vm.maxChoices = 6;
vm.addNewChoice = function(arr) {
var newItemNo = arr.length + 1;
arr.push({
'id': 'choice' + newItemNo
});
};
vm.deleteChoice = function(arr, index) {
arr.splice(index, index);
};
vm.moveUpChoice = function(arr, index) {
var currItem = index;
if (currItem>0) {
arr.splice(currItem-1,0, arr.splice(currItem, currItem)[0]);
}
};
vm.moveDownChoice = function(arr, index) {
var currItem = index;
var newPosition = index+1;
if (currItem < arr.length) {
arr.splice(newPosition,0, arr.splice(currItem, currItem)[0]);
}
};
vm.showAddChoice = function(choice,arr) {
return arr.length !== vm.maxChoices;
};
我对 moveDownChoice 做错了什么?
工作示例:http://plnkr.co/edit/WPdnmYbDSXC0LsbeMduM?p=preview
尝试创建 3 或 4 行,将数据放入字段中以查看其移动。您可以将 #2 移动到 #3 等,但是如果您尝试将第一个向下移动,它会创建一个新项目而不是移动到 #2。
在您的 moveUpChoice 和 moveDownChoice 函数中,您遇到了同样的错误。
arr.splice(currItem, currItem)[0]
应该是:
arr.splice(currItem, 1)[0]
moveUpChoice
和 moveDownChoice
的代码都不正确。两者都没有您期望的那样工作。
.splice()
函数有3个参数。 position
、numToRemove
和 itemsToInsert
。它 returns 已删除项目的数组。
所以在你的代码中,你告诉它去项目的位置,删除项目的项目数量,然后传递第一个要添加到新位置的项目。在第一行中,您将删除 0 个项目(基于 0 的数组),但在其他行中,您将删除比实际添加到新位置的数据更多的数据。向上箭头将使倒数第二个项目从数组中消失。
相反,尝试 arr.splice(newPosition,0, arr.splice(currItem, 1)[0]);