当推动使用角度2 ts时,值undefined

时间:2017-01-07 01:04:05

标签: angular

我可以得到' sm'在推送之前的console.log结果中, 但是在尝试推动时却未定义。

chooseMenu(menu:Menuitems){
const sm = {name:menu.name,quantity:1,price:menu.product[('price')]}
console.log("item add",sm);
this.choosenMenu.push(sm); 
}

'价格'变得不确定,请指导,以便我可以推动' sm'。

这是数据响应菜单:MenuItems

 {
  "data": {
    "items": [
      {
        "id": 15,
        "name": "Canadian Wrap",
        "product": {
          "price": 6.99
        }
      },
      {
        "id": 12,
        "name": "Chicken Caesar Wrap",
        "product": {
          "price": 5.75
        }
      },

和结果控制台日志' sm'

name:"Caramel Sundae"
 price:2.99
 quantity:1

我无权访问

menu.product.price

menu.product[0].price

如何确保"价格"没有变得不确定所以我可以推它,  谢谢

3 个答案:

答案 0 :(得分:0)

而不是menu.product[('price')],请尝试menu.product.pricemenu.product["price"]

如果您的价格为undefined,那么您的对象中的价格也会为undefined。也许价格将在后面的程序中定义在对象中,因此console.log()显示价格(与the possible duplicate类似的行为)。

编辑:在获得更多信息后,您似乎收到的是字符串而不是对象。在访问变量之前,您必须确保该项是对象。您应该使用JSON.parse(yourString)将其转换为对象。

chooseMenu(menu:Menuitems){
 if(typeof menu == "string") menu = JSON.parse(menu); // preferably do this when initializing menu.
 const sm = {name:menu.name,quantity:1,price:menu.product.price}
 console.log("item add",sm);
 this.choosenMenu.push(sm); 
}
  

另外,我会将Menuitems的对象类型更改为Menu   可读性。不清楚menu - 对象是否是列表   或不。如果是列表,我会将类型更改为Array<Menu>,然后相应地更改方法。

答案 1 :(得分:0)

查看评论和错误信息,即:

  

如果我使用menu.product.price错误:&#34; property&#39; price&#39;在字符串&#34;上不存在,如果使用menu.product [&#34; price&#34;] errror:&#34;无法读取属性&#39;价格&#39;未定义&#34;

看起来确实在处理字符串。所以约翰在这里与JSON.parse走在正确的轨道上。但是,如果你正在处理一个字符串,你无法在字符串化之前直接解析它,所以只需这样做:

chooseMenu(menu:Menuitems){
 if(typeof menu == "string") {
   menu = JSON.stringify(menu) // this first, then you can parse it!
   menu = JSON.parse(menu) // then parse it...
 }
 const sm = {name:menu.name,quantity:1,price:menu.product.price}
 console.log("item add",sm);
 this.choosenMenu.push(sm); 
}

答案 2 :(得分:0)

感谢Guide @ AJT_82和John帮助解决它,事件我仍然无法清楚地了解这两种方式绑定角度2,这里解析我做的代码:

chooseMenu(menu:Menuitems){
 if(typeof menu.product == "string") {
   menu.product = JSON.stringify(menu.product) // this first, then you can parse it!
   menu.product = JSON.parse(menu.product) // then parse it...
 }
 const sm = {name:menu.name,quantity:1,price:menu.product[('price')]}
 console.log("item add",sm);
 this.choosenMenu.push(sm); 
}

对于我来说,menu.product需要进行字符串化和解析以及

price:menu.product[('price')]

仍然需要我认为有角度的2种方式