我假设我在这里有语法错误。
我的控制器中有一组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。
答案 0 :(得分:0)
在你的moveUpChoice和moveDownChoice函数中你都有同样的错误。
arr.splice(currItem, currItem)[0]
应该是:
arr.splice(currItem, 1)[0]
答案 1 :(得分:0)
moveUpChoice
和moveDownChoice
的代码均不正确。两者都没有按照你期望的方式运作。
.splice()
函数有3个参数。 position
,numToRemove
和itemsToInsert
。它返回一个已删除项目的数组。
所以在你的代码中,你告诉它去项目的位置,删除项目的位置编号,然后传递第一个要添加到新位置的项目。在第一行中,您将删除0项(基于0的数组),但在其他行中,您将删除的数据超过实际添加到新位置的数据。向上箭头将使最后一个项目的下一个从数组中消失。
相反,请尝试arr.splice(newPosition,0, arr.splice(currItem, 1)[0]);