我在angularJS中很新,我遇到了问题。
这是恢复我的问题的小提琴:http://jsfiddle.net/ShengTi/RmFYv/
如果我发送第一个值并按顺序继续,那么一切都很好。
dptRecep :
[{"text":"Aube","pos":"1"},{"text":"Marne","pos":"2"},{"text":"Haute marne","pos":"3"},{"text":"Bouches du rhone","pos":"4"},{"text":"Aisne","pos":"5"},{"text":"Ain","pos":"6"},{"text":"Aude","pos":"7"}]
但是,如果我发送第一个,然后是第三个等等......我的价值就会变成我的数组。
dptRecep :
[{"text":"Aube","pos":"1"},{"text":"Bouches du rhone","pos":"4"},{"text":"Marne","pos":"2"},{"text":"Haute marne","pos":"3"},{"text":"Aude","pos":"7"}]
我应该在其他人之间插入我的价值......?
答案 0 :(得分:1)
你的算法错了。切片后,您正在推送索引。您可以改为发送项目,也可以在切片前推送。
另外,您只需将项目作为参数从html发送到角度函数。
<a href='' ng-click='goToLastList(item, $index)'>{{item.pos}} - {{item.text}}</a>
$scope.goToLastList = function (item, idx) {
var dptToMoveList2 = $scope.dpt[idx];
console.log(dptToMoveList2);
$scope.dpt.splice(idx,1);
console.log('idx : '+idx);
$scope.dptRecep.push(item);
}
答案 1 :(得分:0)
你可以试试这个:
仅在每个中发送一个属性pos
:
<li ng-repeat="item in dpt | orderBy:order:false">
<a href='' ng-click='goToLastList(item.pos)'>
{{item.pos}} - {{item.text}}
</a>
</li>
...
<li ng-repeat="item in dptRecep | orderBy:order:false">
<a href='' ng-click='goToFirstList(item.pos)'>
{{item.pos}} - {{item.text}}
</a>
</li>
然后,按位值找到数组的位置:
$scope.goToLastList = function (pos) {
var idx = getIndexByPost($scope.dpt, pos)
$scope.dptRecep.push($scope.dpt[idx]);
$scope.dpt.splice(idx, 1);
};
$scope.goToFirstList = function (pos) {
var idx = getIndexByPost($scope.dptRecep, pos)
$scope.dpt.push($scope.dptRecep[idx]);
$scope.dptRecep.splice(idx, 1);
};
function getIndexByPost(array, pos) {
var rindex = 0
array.forEach(function(element, index) {
if (element.pos == pos) rindex = index;
});
return rindex;
};
if (!Array.prototype.forEach) {
Array.prototype.forEach = function (fn, scope) {
'use strict';
var i, len;
for (i = 0, len = this.length; i < len; ++i) {
if (i in this) {
fn.call(scope, this[i], i, this);
}
}
};
}
运行示例here
答案 2 :(得分:0)
您也可以在插入后尝试排序:
$scope.goToLastList = function (item, pos, idx) {
var dptToMoveList2 = $scope.dpt[idx];
console.log(dptToMoveList2);
$scope.dpt.splice(idx,1);
console.log('idx : '+idx);
$scope.dptRecep.push({
text: dptToMoveList2.text,
pos: dptToMoveList2.pos
});
$scope.dptRecep.sort( function (a,b) { return a.pos - b.pos } )