Javascript 无法在接口上迭代。循环变量导致未定义

Javascript 无法在接口上迭代。循环变量导致未定义,javascript,angular,typescript,for-loop,ionic4,Javascript,Angular,Typescript,For Loop,Ionic4,在我的示例中,我创建了一个名为product的接口,并将数据推入其中。为此,我创建了一个total函数,它将来自两个源的数据合并到接口对象中。但是,当我迭代它时,循环变量变得未定义。 在total()函数中,当我迭代cart变量时,p的值未定义。知道为什么吗 先谢谢你 .ts import{stocks}来自“../../class objects/stocks” 导出接口产品{ 产品标识:编号; 名称:字符串; 图片地址:字符串; 边距:数字; 商品及服务税:数字; 描述:字符串; 日期:日期

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

先谢谢你 .ts

import{stocks}来自“../../class objects/stocks”
导出接口产品{
产品标识:编号;
名称:字符串;
图片地址:字符串;
边距:数字;
商品及服务税:数字;
描述:字符串;
日期:日期;
子单元id:编号;
单位:字符串;
数量:数量;
股票:股票[]
}
导出类ItemsPage实现OnInit{
myListObject=[]作为数组
@ViewChild('cart',{static:false,read:ElementRef})fab:ElementRef;
构造函数(私有cartService:cartService,私有modalCtrl:ModalController,公共productService:productService){}
恩戈尼尼特(){
此.cartService.getProductDetails().subscribe(数据=>{
这就是产品=数据;
this.filter_products=this.products;
console.log(this.products)
})
this.cart=this.cartService.getCart();
this.cartItemCount=this.cartService.getCartItemCount();
}
onChange(数量、产品){//来自select from html的数量
this.selected_quant=数量;
}
addToCart(产品){
此.total(产品、此.selected\u quant)
}
总计(产品、数量){
console.log(this.cart)
for(让p离开这个.cart){
console.log(“p的值=”+p)//导致未定义
console.log(p.image\u url)//导致未定义
console.log(p.name)//导致未定义
console.log(product.product\u id)
if(p.product\u id==product.product\u id){
p、 数量=产品数量
}
否则{
this.myListObject.push(产品、数量)
console.log(this.myListObject)
this.cartService.addProduct(this.myListObject);
这是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);
      }
private cart=[];
私有cartItemCount=新行为主体(0);
构造函数(私有http:HttpClient){}
getProductDetails():可观察{
返回此.http.get('http://[::1]:3000/products?&filter[include][[relation]=stocks'))
}
getCart(){
归还这个购物车;
}
getCartItemCount(){
返回此.cartItemCount;
}
添加产品(产品){
让加法=假;
为了(让p离开这个购物车){
console.log(“cartservice”+p)//导致未定义
if(p.product\u id==product.product\u id){
p、 数量=产品数量;
添加=真;
打破
}
}
如果(!已添加){
本.车.推(产品);
}
this.cartItemCount.next(this.cartItemCount.value+1);
}

替换
总计
功能

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");
    }
  }
}

更换
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");
    }
  }
}

向我们展示您在typescript中执行迭代的html代码。在total function for(让p作为这个.cart的一部分)中,p的值是未定义的。好的,你需要把你所有的服务都放进去!我已经上传了服务。即使在addproduct()函数的服务中,循环变量也是未定义的。total方法在addToCart()中调用,但在您发布的代码中从未调用addToCart。请向我们展示您在typescript中执行迭代的html代码。在total function for(让p作为这个.cart的一部分)中,p的值是未定义的。好的,你需要把你所有的服务都放进去!我已经上传了服务。即使在addproduct()函数中的服务中,循环变量也是未定义的。total方法在addToCart()中调用,但在您发布的代码中从未调用addToCart。当然,我在服务中有类和构造函数。问题在于此行项目页面中的total()函数-for(让p of this.cart){console.log(“p的值=”+p)//导致未定义p的值返回未定义。这是我指出的问题。下次,请提供所有代码,而不仅仅是会让人困惑的部分。请检查我的编辑。@pratikjaiswalOf当然我有类和构造函数在服务中。问题在于此行项目页中的total()函数-for(让p of This.cart){console.log(“p的值=”+p)//导致未定义p的值返回未定义。这是我指出的问题。下一次,请提供所有代码,而不仅仅是会让人困惑的部分。请检查我的编辑。@pratikjaiswal