我有一个对象,其中包含一个名为" blocks":
的对象数组$scope.microsite = {
images: [
{url: "https://unsplash.it/800/400/?image=20"},
{url: "https://unsplash.it/800/400/?image=15"},
{url: "https://unsplash.it/800/400/?image=52"}
],
blocks: []
};
当我向这个数组添加东西时,它表现得非常正常:
$scope.addElement = function(a){
if(a=='heroslider'){
var data = {
slides: [
{
id:0,
image:0,
title: "Title",
desc: "Description",
},
{
id:1,
image:1,
title: "Title",
desc: "Description",
},
{
id:2,
image:2,
title: "Title",
desc: "Description",
}
]
};
} else if(a=='threecol'){
var data = {
columns: [
{
title: "Column one",
text: "This is a column for features",
},
{
title: "Column two",
text: "This is a column for features",
}
]
};
}
var element = {
template: a,
data: data
};
$scope.microsite.blocks.push(element);
}
然而,当我尝试通过在ng-click上调用此函数并从ng-repeat传入对象时从数组中删除对象...
$scope.removeElement = function(element){
var x = $scope.microsite.blocks.indexOf(element);
console.log($scope.microsite.blocks[x]);
console.log(x);
$scope.microsite.blocks.splice(x, 1);
}
我能够在我的控制台中同时获取正确的对象和正确的索引,但是当它转换为拼接数组时,最后一个对象总是被删除,这很奇怪,因为这应该只在索引I&时发生#39;我试图删除不存在(因此等于-1)
为什么会发生这种情况的任何想法?
编辑:我也尝试过使用ng-click =" microsite.blocks.splice($ index,1)"直接在元素中,以及将$ index传递给函数而不是元素。在所有情况下,都找到了正确的索引,但结果仍然相同,只删除了最后一个条目。
答案 0 :(得分:0)
原来这是Angular中“track by $ index”的错误。从ng-repeat中删除“track by $ index”后,splice()正常运行。