увеличивать общее количество при каждом добавлении продукта

#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:

Существует несколько проблем,

  1. При добавлении продукта вы добавляете его, productArray но при вычислении общего количества вы вычисляете из productList . Это даст вам постоянное общее количество независимо от того, сколько продуктов вы добавляете в productArray.
  2. 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);
  });
}