В моем приложении angularjs у меня есть следующий список объектов.
$scope.itemsList = [
{
"setupId": "T_2893",
"name" : "abc"
},
{
"setupId": "LBT826",
"name" : "xyz"
},
{
"setupId": "LBT1252",
"name" : "pqr"
},
{
"setupId": "G1252",
"name" : "dwr"
}
]
Теперь, когда я вызываю функцию $ scope.changeOreder(1, 3), она должна переупорядочить объекты на основе предыдущего и следующего индекса. поэтому список должен быть следующим.
$scope.itemsList = [
{
"setupId": "T_2893",
"name" : "abc"
},
{
"setupId": "LBT1252",
"name" : "pqr"
},
{
"setupId": "G1252",
"name" : "dwr"
},
{
"setupId": "LBT826",
"name" : "xyz"
}
]
Теперь, если я позвоню, $scope.changeOreder(2, 0)
, новый список должен быть,
$scope.itemsList = [
{
"setupId": "G1252",
"name" : "dwr"
},
{
"setupId": "T_2893",
"name" : "abc"
},
{
"setupId": "LBT1252",
"name" : "pqr"
},
{
"setupId": "LBT826",
"name" : "xyz"
}
]
В моей функции $ scope.changeOrder я пробовал разные способы, например, взять резервную копию объекта в prevIndex
, а затем удалить obj в prevIndex
чтобы вставить prevIndex
копию obj в newIndex
, но поскольку я удалил объект, то newIndex
не более актуальным в текущем списке !!!. Подобным образом я пробовал разные способы, но окончательный список не упорядочивается так, как я ожидаю. Может ли кто-нибудь помочь мне в ее исправлении.
Перемещение элемента в указанный индекс:
var items = [
{
"setupId": "G1252",
"name" : "dwr"
},
{
"setupId": "T_2893",
"name" : "abc"
},
{
"setupId": "LBT1252",
"name" : "pqr"
},
{
"setupId": "LBT826",
"name" : "xyz"
}
];
function moveItem(posA, posB) {
/*
* If an item is moved from a higher index to a lower index, then we need to
* remove the current item first, then add it.
* When moving a item from a low index to a higer index, then we need to add
* the item first, then delete it.
*/
var upToDown = posA > posB;
var itemToMove = items[posA];
//Make copy first
var tmpList = items.slice(0);
if (!upToDown) {
//Add item to specified index
tmpList.splice(posB+1, 0, itemToMove);
//Remove the old item
tmpList.splice(posA, 1);
} else {
//Remove the old item
tmpList.splice(posA, 1);
//Add item to specified index
tmpList.splice(posB, 0, itemToMove);
}
return tmpList;
}
var result = moveItem(0, 3);
console.log(result);
angular.copy()
docs.angularjs.org/api/ng/function/angular.copy.