我有两个离子页1(菜单项2(您的订单在"菜单项"页面中,有选择每个菜单的菜单项列表,然后添加,然后将其传递到"您的订单"页面。从"菜单项"页面中,我将每个项目作为JSON对象发送,然后我试图以"您的订单"页面上的数组"订单"推动它。然后,我将该数组存储到LocalStorage。在这里,对于第一个项目,它有效,但是当我尝试输入下一个项目时,回到菜单项页面时,第一个被替换了,只有最新的一个存储了我实际上不想要的。我想将多个项目推入订购页面。解决方案可以是什么?
[这是"菜单项"页面中的处理程序,其中每个项目都发送到'您的订单'页面。]
handler: data => {
this.orderItem = {'tableId':this.tableId, 'menuId': menuItemData.item_id, 'menuName': menuItemData.name, 'qty': data.qty,
'rate': menuItemData.price, 'description': data.description};
this.navCtrl.push(OrderpagePage, {'orderItem':this.orderItem});
}
从这里我推了物品。
ionViewWillEnter() {
let temp = this.navParams.get('orderItem');
if(this.localStorageService.get('order') == null){
this.orders.push(temp);
this.localStorageService.set('order', this.orders);
} else {
let length:any[] = JSON.parse(this.localStorageService.get('order'));
console.log(length)
let temp1 = length.push(temp)
this.localStorageService.add('order', temp1)
}
Array.push
返回数组的新长度,而不是数组的引用或副本。如另一个答案所述,add
不存在。另外,您似乎正在混合存储值是JSON字符串还是JavaScript类型。LocalStorage采用字符串值。
ionViewWillEnter() {
const order = this.navParams.get('orderItem');
const ordersString = this.localStorageService.get('order')
const orders = typeof ordersString === 'string'
? JSON.parse(ordersString)
: []
orders.push(order)
this.localStorageService.set('order', JSON.stringify(orders))
}
将您的其他块中的最后一行更改为 -
this.localStorageService.set('order', temp1)
在localstorageservice中没有诸如 add((之类的方法,请使用 set((,就像您在if block中一样。希望有效!
参考 - http://gregpike.net/demos/angular-local-storage/demo/demo.html