如何在本地存储中存储多个 Json 对象数据以及如果存在如何更新它
How to store multiple Json object data in local storage & if existing how to update it
在我的 angular 项目中有一个购物车功能。 Soi 需要任何人的帮助。
1。如何检查用户之前添加到购物车(通过将本地存储中的现有产品 ID 与新选择的产品 ID 匹配)、现在选择的产品。
2。如果以前添加到购物车,如何更新它(新数量或新类型到现有产品 ID 下)。
3。如果之前没有添加,如何在新的Product ID下作为新产品推送到本地存储。不能影响其他选定的购物车产品
Angular 7 cli
Product.components.ts
constructor(private cartService:CartServicesService)
public addToCart(productId : any , productTypeStatus:any , quantityCount:any ){
var cartProductData = {
"productId": productId,
"productSelectedTypeId": productTypeStatus,
"productQuantity": quantityCount
};
this.cartService.addToCart(cartProductData); //send data to cart-service.ts
}
购物车-services.service.ts
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class CartServicesService {
constructor() { }
public addToCart(cartData:any) {
console.log(cartData);
//save data in local storage------------------------------------
localStorage.setItem('cartObject', JSON.stringify(cartData));
}
}
在本地存储
Key : cartObject
Value : {"productId":3,"productSelectedTypeId":null,"productQuantity":4}
嗯,您在问题中提到的步骤通常是正确的。但是,我建议您将它存储为一个对象数组,而不是一个单独的对象。
这是您从 localStorage 获取购物车数据的方法。
let cart = JSON.parse(localStorage.getItem('cartObject'));
然后,我们使用 Array.some() 检查您购物清单上的新商品是否存在于来自 cartObject
的购物车中。
let isInCart = false;
if (cart) {
isInCart = cart.some(item => item.productId ===
cartProductData.productId));
} else {
cart = [];
}
然后,我们根据isInCart
来处理它,这是一个布尔值,表示该商品是否存在于购物车中:
if (isInCart) {
cart.map(item => {
if (item.productId === cartProductData.productId) {
item.productQuantity += cartProductData.productQuantity;
}
return item;
});
} else {
cart.push(cartProductData);
}
然后,我们将更新后的 cart
存储在您的本地存储中:
localStorage.setItem('cartObject', JSON.stringify(cart));
localStorage 将值存储在键值对中。
1) 使密钥对用户唯一并存储他们的产品。
2) 如果有多个产品存储为用户键作为值的购物车对象数组。
3) 如果要更新值列表中的单个产品,从存储中检索列表修改其中所需的值,替换存储中的列表。 (因为它的映射,添加另一对具有相同键的键将 replace/overwrite 该键的现有值)。
4) 如果要更新整个列表,只需替换用户键的值即可。
在我的 angular 项目中有一个购物车功能。 Soi 需要任何人的帮助。
1。如何检查用户之前添加到购物车(通过将本地存储中的现有产品 ID 与新选择的产品 ID 匹配)、现在选择的产品。
2。如果以前添加到购物车,如何更新它(新数量或新类型到现有产品 ID 下)。
3。如果之前没有添加,如何在新的Product ID下作为新产品推送到本地存储。不能影响其他选定的购物车产品
Angular 7 cli
Product.components.ts
constructor(private cartService:CartServicesService)
public addToCart(productId : any , productTypeStatus:any , quantityCount:any ){
var cartProductData = {
"productId": productId,
"productSelectedTypeId": productTypeStatus,
"productQuantity": quantityCount
};
this.cartService.addToCart(cartProductData); //send data to cart-service.ts
}
购物车-services.service.ts
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class CartServicesService {
constructor() { }
public addToCart(cartData:any) {
console.log(cartData);
//save data in local storage------------------------------------
localStorage.setItem('cartObject', JSON.stringify(cartData));
}
}
在本地存储
Key : cartObject
Value : {"productId":3,"productSelectedTypeId":null,"productQuantity":4}
嗯,您在问题中提到的步骤通常是正确的。但是,我建议您将它存储为一个对象数组,而不是一个单独的对象。
这是您从 localStorage 获取购物车数据的方法。
let cart = JSON.parse(localStorage.getItem('cartObject'));
然后,我们使用 Array.some() 检查您购物清单上的新商品是否存在于来自 cartObject
的购物车中。
let isInCart = false;
if (cart) {
isInCart = cart.some(item => item.productId ===
cartProductData.productId));
} else {
cart = [];
}
然后,我们根据isInCart
来处理它,这是一个布尔值,表示该商品是否存在于购物车中:
if (isInCart) {
cart.map(item => {
if (item.productId === cartProductData.productId) {
item.productQuantity += cartProductData.productQuantity;
}
return item;
});
} else {
cart.push(cartProductData);
}
然后,我们将更新后的 cart
存储在您的本地存储中:
localStorage.setItem('cartObject', JSON.stringify(cart));
localStorage 将值存储在键值对中。
1) 使密钥对用户唯一并存储他们的产品。
2) 如果有多个产品存储为用户键作为值的购物车对象数组。
3) 如果要更新值列表中的单个产品,从存储中检索列表修改其中所需的值,替换存储中的列表。 (因为它的映射,添加另一对具有相同键的键将 replace/overwrite 该键的现有值)。
4) 如果要更新整个列表,只需替换用户键的值即可。