从角度重复循环中的javascript对象中删除元素

时间:2015-02-18 11:56:59

标签: javascript angularjs angularjs-ng-repeat

我的数据如下:

$scope.cart={"4": {"cost": 802.85,  "description": "test", "qty": 1},
"5": {"cost": 802.85,  "description": "test", "qty": 1}};

我想循环显示这些数据并将其与删除按钮一起显示。如何使按钮从示波器中删除行并触发角度摘要?所有教程似乎都有数组,并拼接该数组,这不符合我的需要。

这是我到目前为止所做的:http://jsfiddle.net/wbebc4cd/1/

3 个答案:

答案 0 :(得分:3)

正如@dfsq所提到的,你的函数中有一个拼写错误。

但更重要的是,当重复地图时,你还应该记住密钥。 (另见How to use ng-repeat to iterate over map entries in AngularJS

<tr ng:repeat="(key,item) in cart">

然后您可以使用该键删除该项目。

<td>[<a href ng:click="removeItem(key)">X</a>]</td>

http://jsfiddle.net/wbebc4cd/5/

答案 1 :(得分:1)

这是删除项目的正确代码。

function CartForm($scope) {
    $scope.cart=[{"id": 1, "cost": 802.85,  "description": "test", "qty": 1}, {"id": 2, "cost": 802.85,  "description": "test", "qty": 1}];


    $scope.removeItem = function(item) {
        var index = $scope.cart.indexOf(item);
        $scope.cart.splice(index, 1);

    }


}

答案 2 :(得分:0)

您可以尝试以下方式:

$scope.removeItem = function(item) { 
    var newCart = {};
    angular.forEach($scope.cart, function(value, key){
        if(value != item)
            newCart[key] = value; 
    });

    $scope.cart = newCart;   
};

JSFiddle:http://jsfiddle.net/0v40rhfb/2/