Angularjs拼接对象内部的对象数组总是删除最后一个对象

时间:2016-05-07 14:24:40

标签: javascript arrays angularjs splice

我有一个对象,其中包含一个名为" 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传递给函数而不是元素。在所有情况下,都找到了正确的索引,但结果仍然相同,只删除了最后一个条目。

1 个答案:

答案 0 :(得分:0)

原来这是Angular中“track by $ index”的错误。从ng-repeat中删除“track by $ index”后,splice()正常运行。