#javascript #angular #typescript #cart
#javascript #угловой #typescript #Корзина
Вопрос:
У меня проблема, когда я добавляю продукт, общее количество показывает мне 20, я не знаю, почему? и если я увеличиваю общее количество, оно не перемещается, как я могу это сделать?
Спасибо
ts.file
productList = [
{ id: 1, name: 'Louis Vuis', price: 10, qtn: 1 },
{ id: 2, name: 'shubert helmet', price: 20, qtn: 1 },
];
productArray: any = [];
totalAmount: number;
ngOnInit() {
this.totalPrice();
}
add(product, idx) {
const found = this.productArray.find(
item => JSON.stringify(item) === JSON.stringify(product)
);
if (found) {
this.productArray[idx].qtn ;
} else {
this.productArray.push(product);
}
}
totalPrice() {
this.productList.forEach(item => {
this.totalAmount = (item.qtn * item.price)
console.log(this.totalAmount);
});
}
Комментарии:
1. this.TotalAmount = (item.qtn * item.price)
Ответ №1:
Проблема в другом, я чувствую. То, что вы делаете, правильно
totalPrice() {
this.productList.forEach(item => {
this.totalAmount = (item.qtn * item.price)
console.log(this.totalAmount);
});
}
Но вы повторяете объект javascript и присваиваете значение общей сумме.
Поэтому при повторении, если вы хотите показать цену каждого товара на основе количества, вам нужно присвоить значение в новом ключе продукта.
Что-то вроде item.total = (item.qtn * item.price);
Если вы хотите отобразить сумму всех значений в TotalAmount, вам нужно будет сделать this.totalAmount = (item.qtn * item.price)
и когда вы добавляете количество, увеличивайте количество на 1, которое вы делаете, обновите состояние и вызовите this.totalPrice()
Ответ №2:
Существует несколько проблем,
- При добавлении продукта вы добавляете его,
productArray
но при вычислении общего количества вы вычисляете изproductList
. Это даст вам постоянное общее количество независимо от того, сколько продуктов вы добавляете в productArray. this.totalAmount = (item.qtn * item.price)
переназначит обновленное значение в TotalAmount вместо добавления к предыдущему значению. Вам нужно написать,this.totalAmount = (item.qtn * item.price)
Насколько я понимаю, я обновляю метод TotalPrice. Не уверен, поможет это или нет,
totalPrice() {
this.productList.forEach(item => {
let productIndexInProductArray = productArray.findIndex(p => p.id === item.id);
if(productIndexInProductArray > -1) {
this.totalAmount = (productArray[productIndexInProductArray].qtn * item.price)
console.log(this.totalAmount);
}
});
}
Ответ №3:
totalAmount: number=0;
this.totalAmount = (item.qtn * item.price)
Комментарии:
1. Мохаммед, ты должен объяснить ответ, а не просто отправлять только код.
2. 1. Вам необходимо инициализировать общее количество = 0. Это вы пропустили в своем коде. Затем вторая строка this.TotalAmount = (item.qtn *item.price) на самом деле это означает следующее.TotalAmount = this.TotalAmount (item.qtn *item.price). В forloop вы повторяете цикл и сохраняете значение в this.TotalAmount . В первом цикле вы получите 10, а во втором цикле 20.So общее количество равно 10 20 = 30
3. Нет, я сказал вам объяснить свой ответ после того, как вы разместили код, а не в комментарии, и это не для меня, это объяснение для пользователя, который видит ваш ответ, у меня есть предложение от stackoverflow улучшить ваш ответ, поэтому я дал вам совет, так что нет необходимостичтобы объяснить это в комментарии, лучше объясните это в самом ответе, спасибо.
Ответ №4:
Проблема totalAmount
в том, что идентификатор определен, но не инициализирован, поэтому первое изменение необходимо инициализировать totalAmount
totalAmount: number = 0;
Второе изменение необходимо сделать в totalPrice
функции, потому что каждый раз, когда вы вычисляете сумму, для которой значение количества элемента устанавливается на totalAmount
so totalAmount
, сбрасывается с каждым элементом, поэтому вы получаете последнее количество элементов в консоли. вам нужно добавить количество товара totalAmount
, как показано ниже
totalPrice() {
this.productList.forEach(item => {
this.totalAmount = (item.qtn * item.price)
console.log(this.totalAmount);
});
}