javascript - 无法迭代接口(interface)。循环变量导致未定义

标签 javascript angular typescript for-loop ionic4

在我的示例中,我创建了一个名为产品的接口(interface)并将数据推送到其中。为此,我创建了一个总函数,它将来自两个源的数据组合起来并推送到接口(interface)对象中。但是当我迭代它时,循环变量变得未定义。 在 Total() 函数中,当我迭代 cart 变量时,p 的值未定义。知道为什么吗?

提前谢谢您 .ts

  import { stocks } from '../../class-objects/stocks'


    export interface Product {

      product_id : number;
      name : string;
      image_url : string;
      margin : number;
      gst : number;
      description : string;
      date : Date;
      sub_id : number;
      unit : string;
      quantity : number;
      stocks : stocks [] 

    }

    export class ItemsPage implements OnInit {

      myListObject = [] as Array<Product>

      @ViewChild('cart', {static: false, read: ElementRef})fab: ElementRef;

      constructor(private cartService: CartService, private modalCtrl: ModalController, public productService : ProductService) { }


      ngOnInit() {

        this.cartService.getProductDetails().subscribe(data =>{
          this.products = data;
          this.filter_products = this.products;

          console.log(this.products)
        })
        this.cart = this.cartService.getCart();
        this.cartItemCount = this.cartService.getCartItemCount();
      }

      onChange(quantity,product) { // quantity coming from select from html

        this.selected_quant  = quantity;
      }

      addToCart(product) {

        this.total(product,this.selected_quant)

      }


      total(product,quantity) {

        console.log(this.cart)

        for(let p of this.cart ) {
          console.log("Value of p="+p) // resulting in undefined

          console.log(p.image_url)  // resulting in undefined
          console.log(p.name) // resulting in undefined
          console.log(product.product_id)

          if(p.product_id === product.product_id){
            p.quantity = product.quantity
        }
        else {

          this.myListObject.push(product,quantity)
            console.log(this.myListObject)
          this.cartService.addProduct(this.myListObject);
          this.animateCSS('tada');
        }
      }

        }
      }

cartservice.ts

  private cart = [];
  private cartItemCount = new BehaviorSubject(0);


  constructor(private http: HttpClient) { }

  getProductDetails (): Observable<any[]> {
    return this.http.get<any[]>('http://[::1]:3000/products?&filter[include][][relation]=stocks')

  }

     getCart() {
        return this.cart;
      }

      getCartItemCount() {
        return this.cartItemCount;
      }

      addProduct(product) {
        let added = false;
        for (let p of this.cart) {
          console.log("cartservice " +p) // resulting in undefined 
          if (p.product_id === product.product_id) {
            p.quantity = product.quantity;

            added = true;
            break;
          }
        }
        if (!added) {
          this.cart.push(product);
        }
        this.cartItemCount.next(this.cartItemCount.value + 1);
      }

最佳答案

替换total函数。

total(product, quantity) {
  console.log(this.cartService.getCart());

  for (let p of this.cartService.getCart()) {
    console.log("Value of p=" + p); // resulting in undefined

    console.log(p.image_url); // resulting in undefined
    console.log(p.name); // resulting in undefined
    console.log(product.product_id);

    if (p.product_id === product.product_id) {
      p.quantity = product.quantity;
    } else {
      this.myListObject.push(product, quantity);
      console.log(this.myListObject);
      this.cartService.addProduct(this.myListObject);
      this.animateCSS("tada");
    }
  }
}

关于javascript - 无法迭代接口(interface)。循环变量导致未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58976712/

相关文章:

javascript - Canvas 从 daturl 绘制新图像

angular - dart2js 试图编译 css?

javascript - Angular 2 - 无法匹配任何路由 'auth'

angular - 错误 TS2300 : Duplicate identifier 'export='

javascript - 将 td 包装在 div 中并在 JQuery 对话框中打开该 div

javascript - 为什么这个矩形不宽

Angular v8 - @ViewChild 静态真或假

javascript - Angular material displayWith 不适用于 ngx-translate

javascript - Typescript 检查 "any n consecutive elements are same"是否在 M 大小的数组中

javascript - 在 Button 标签内的 span 标签 onClick 上更改类