Javascript 对象内部对象的Angularjs拼接数组始终删除最后一个对象

Javascript 对象内部对象的Angularjs拼接数组始终删除最后一个对象,javascript,arrays,angularjs,splice,Javascript,Arrays,Angularjs,Splice,我有一个对象,它包含一个称为“块”的对象数组: 当我向该数组添加内容时,它的行为非常正常: $scope.addElement = function(a){ if(a=='heroslider'){ var data = { slides: [ { id:0, image:0, title: "Ti

我有一个对象,它包含一个称为“块”的对象数组:

当我向该数组添加内容时,它的行为非常正常:

$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上调用此函数并从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);
}
我能够在控制台中获得正确的对象和正确的索引,但是当它拼接数组时,最后一个对象总是被删除,这非常奇怪,因为只有当我试图删除的索引不存在时才会发生这种情况(因此等于-1)

你知道为什么会这样吗


编辑:我还尝试直接在元素中使用ng click=“microsite.blocks.splice($index,1)”,并将$index传递到函数中而不是元素中。在所有情况下,都会找到正确的索引,但结果仍然相同,只删除了最后一个条目。

结果表明,这是Angular中“track by$index”的错误。从my ng repeat中删除“track by$index”后,splice()功能正常。

结果表明,这是Angular中“track by$index”的错误。从my ng repeat中删除“track by$index”后,splice()功能正常

$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);
}