我可以得到' 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
如何确保"价格"没有变得不确定所以我可以推它, 谢谢
答案 0 :(得分:0)
而不是menu.product[('price')]
,请尝试menu.product.price
或menu.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种方式