Angular4 - 新产品数量(数量)不与之前的数量相加

标签 angular

我在一个电子商务网站工作,在这个网站中,我的购物车中有一些产品,当我添加更多产品时,新数量不会添加到之前的数量中。 就我而言,它总是用新的购物车值(value)替换旧的购物车值(value)..

这是我的服务组件

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';

@Injectable()
export class CartdataService {

  private Count = new BehaviorSubject<number>(0);
  cast = this.Count.asObservable();

  constructor() { }

  editCount(newCount){
  this.Count.next(newCount);
  }

}

这是我的应用程序组件(这里我在页面顶部显示购物车总值(value))

import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { DatePipe } from '@angular/common';
import { HostListener } from '@angular/core';
import {CartdataService} from './cartdata.service';


@Component({
    selector: 'app-root',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.css']

})

export class AppComponent implements OnInit{
 nCount : number;
  constructor(private CartdataService:CartdataService,private http: HttpClient) { }
 ngOnInit() {
        this.CartdataService.cast.subscribe(totalItems=> this.nCount = totalItems);
}
}

应用程序组件 HTML

<span class='notification-counter badge badge-danger' [class.disabled]="nCount == 0" data-toggle="modal" data-target="#exampleModal">{{nCount}}</span>

这是我的“添加到购物车”屏幕 HTML(此处添加所选产品的产品数量)

<div class="col-sm-9">
              <div class="row">
                <div class="col-sm-3">
                    <input type="text" readonly  class="form-control col-8 text-center bg-white font-weight-bold " id="counterval" value="{{counter}}" #Totalcartval>
                </div>         
                    <a class="btn btn-primary text-white" (click)="decrement()" role="button">
                        <i class="fa fa-minus" style="font-size:15px"></i>
                    </a>
                    <div class="col-sm-1"></div>
                    <a class="btn btn-primary text-white" (click)="increment()"  role="button">
                        <i class="fa fa-plus" style="font-size:15px"></i>
                    </a>            
            </div>
          </div>


 <button type="button"  (click)="sendRecord(Totalcartval.value)" class="btn btn-success" data-toggle="modal" data-target=".bd-example-modal-lg">Add To Cart</button>  

通过单击加号和减号按钮,我可以增加和减少数量,然后单击“添加到购物车”按钮,所选数量将传递到服务文件和数据库

这是我的购物车组件

import { Component,EventEmitter,Output } from '@angular/core';
import { Router } from '@angular/router';
import { HttpClient } from '@angular/common/http';
import { SessionStorageService,SessionStorage } from 'angular-web-storage';
import {CartdataService} from '../cartdata.service';


@Component({
  selector: 'app-my-cart',
  templateUrl: './my-cart.component.html',
  styleUrls: ['./my-cart.component.css'],
  outputs :['ChildEvent']
})

export class MyCartComponent  {
  today = Date.now();
  fixedTimezone =this.today;
  public counter : number = 1;   
  res : string;
  public Count : number;


  imageURL:string ="assets/Product _Details/Show1.png";

    increment(){this.counter += 1;}
    decrement(){if(this.counter >1){this.counter -= 1;}}

    public sendRecord(Totalcartval : number ) {  
      this.CartdataService.editCount(Totalcartval);
      this.http.get('http://freegeoip.net/json/?callback')
                 .subscribe(
                    data => this.saveIP(data['ip'],Totalcartval),
                    error => console.error(error)
                 );
    }
    saveIP(address: string,cartval :number) {
      this.http.get(`http://localhost:57036/api/data/CartCount/?IP_ADDRESS=${address}&ITEM_QTY=${cartval}&TIME=${this.fixedTimezone}`)
               .subscribe(data => this.res  = (data['ITEM_QTY']),
               error => console.error(error));       
  } 
 ngOnInit() {}

}

这里我无法将之前选择的产品的数量与新选择的产品的数量相加。请帮我解决这个问题。 谢谢。

最佳答案

您的代码有一些问题,因此我没有指出它们,而是将您的代码添加到 stackblitz 并修复了它们。

查看here .

第一个主要问题是:

public sendRecord(Totalcartval : number ) {
  this.CartdataService.editCount(Totalcartval);
...

我改成这样:

public sendRecord() {  
  this._cartDataService.editCount(this.counter);
...

#Totalcartval 将从模板作为字符串传递。不需要这个模板变量,因为您已经将计数存储在 this.counter 中,因此使用起来更容易。

@David 的评论中指出了另一个主要问题 - 您总是传递新的总计,而不是跟踪现有的(之前的)总计。通过按照 David 的建议更改服务解决了这个问题:

  editCount(newCount: number){
    this.currentCount += newCount; 
    this.Count.next(this.currentCount);
  }

仅供引用,我无法在 stackblitz 中加载 font-awesome,因此只需用 + 和 - 替换图标

关于Angular4 - 新产品数量(数量)不与之前的数量相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49402749/

相关文章:

angular - 我们可以将html模板从一个组件传递到Angular2中的另一个组件吗?

html - 如何对齐列表元素之间的空间

angular - IE 11 中的 Flexbox 重叠 flex 元素

laravel - Angular2 尝试将图像上传到 Lumen 后端时出错

javascript - 在 Angular 2+ 中进行 DOM 操作的正确方法

javascript - angular是否有任何方法来计划dom的度量和变异?

angular - Angular Guard 可以阻止管理面板服务器端吗?

Angular 5 - 如何从 dom 中删除动态添加的组件

angular - Angular 12 中复选框更改处理函数的 Jasmine 测试

javascript - 在 Javascript 代码中访问路由器