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