我创建了一个购物车页面,当单击按钮时,该页面会将有关产品的信息添加到数组中。我希望能够搜索购物车数组,如果已经添加了该产品,请增加它的数量。
所以我有这样的事情: $ scope.cartItems = [];
$scope.updateCart = function(product) {
var found = $filter('filter')($scope.cartItems, {title: product.title}, true);
if (found.length) {
//This is where i'm not sure what to do
} else {
$scope.addToCart(product);
};
};
$scope.addToCart = function(product) {
$scope.cartItems.push({
title: product.title,
image: product.image,
thumb: product.thumb,
price: product.price,
id: product.id,
quantity: 1
});
};
});
答案 0 :(得分:1)
我建议在使用Arrays \ Collections时考虑使用lodash \ underscore,两个很棒的模块可以让你的生活更轻松。
我认为按标题查找项目并不是唯一的(考虑使用ID),但这是您的选择,这是您可以使用underscore轻松实现它(下面没有下划线的另一个选项)。
定义下划线:
var underscore = angular.module('underscore', []);
underscore.factory('_', function() {
return window._; // assumes underscore has already been loaded on the page
});
// Declare it as a dependency of your module
var app = angular.module('app', ['underscore']);
// And then inject it where you need it
app.controller('Ctrl', function($scope, _) {
});
控制器:
$scope.updateCart = function(product) {
var index = _.findIndex($scope.cartItems, {title: product.title});
if (index != -1) {
$scope.cartItems[index].quantity++;
} else {
$scope.addToCart(product);
};
};
$scope.addToCart = function(product) {
$scope.cartItems.push({
title: product.title,
image: product.image,
thumb: product.thumb,
price: product.price,
id: product.id,
quantity: 1
});
};
});
如果没有下划线,可以这样做:
var index= $scope.cartItems.map(function(x) {return x.title; }).indexOf(titleYouLookFor);
if (index != -1) {
$scope.cartItems[index].quantity++;
} else {
$scope.addToCart(product);
};