【问题标题】:How do I detect if an object has been added using angular.forEach AngularJS如何使用 angular.forEach AngularJS 检测是否已添加对象
【发布时间】:2013-12-17 20:13:50
【问题描述】:

我正在尝试将对象添加到 $scope.orderitems,如果对象已经在 $scope.orderitems 中,我想使用 angular.forEach 更改对象的数量属性,而不是添加另一个对象。每当我调用 additem 函数时,我都会收到未定义 orderitems 的错误。

这是我的代码

HTML

<input type="text" ng-model="item.name">
<button type="button" ng-click="additem(item)">

<ul>
    <li ng-repeat="orderitem in orderitems">
        <p>{{ orderitem.name }} | {{ orderitem.qty }}</p>
    </li>
</ul>

JS

app.controller('OrderCtrl', function($scope) {
    $scope.orderitems = [];
    $scope.additem = function(data) {

        angular.forEach(orderitems, function(orderitem) {
            if (orderitem.id === data.id) {
                orderitem.qty = orderitem.qty++;
            } else {
                data.qty = 1;
                $scope.orderitems.push(data);
            }
        });
    };
});

【问题讨论】:

  • angular.forEach($scope.orderitems,function(orderItem......

标签: javascript arrays angularjs foreach


【解决方案1】:

这是一个有效的小提琴:http://jsfiddle.net/rodhartzell/hbN4G/

HTML

<body ng-app="app">
    <div ng-controller="OrderCtrl">
    <input type="text" ng-model="item.name">
        <button type="button" ng-click="additem()">add</button>

    <ul>
        <li ng-repeat="orderitem in orderitems">
            <p>{{ orderitem.name }} | {{ orderitem.qty }}</p>
        </li>
    </ul>
</div>

控制器

var app = angular.module('app', []);

app.controller('OrderCtrl', function($scope) {

    $scope.orderitems = [{name: 'foo', id:1, qty:1}];
    $scope.additem = function() {
        var exists = false;
        var data = {
            id : $scope.orderitems.length + 1,
            name: $scope.item.name,
            qty: 1
        }
        angular.forEach($scope.orderitems, function (item) {
            if (item.name == data.name) {
                exists = true;
                item.qty++;
                return false;
            }
        });
        if(!exists){
            $scope.orderitems.push(data);
        }

    };
});

【讨论】:

【解决方案2】:
$scope.orderitems = [];
$scope.additem = function(data) {
    var item = null
    angular.forEach(orderitems, function(orderItem) {
        if (orderItem.id === data.id) {
            item = orderItem
            return false;
        }
    });
    if (item == null) {
       item = {
         id: data.id, qty : 0
       }
       $scope.orderitems.push(item)
    }

    item.qty++
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多