我有两个离子页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});
}
从这里开始,我已将项目推送到localstorage。
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)
}
答案 0 :(得分:0)
将else块中的最后一行更改为 -
this.localStorageService.set('order', temp1)
在localStorageService中没有诸如 add()之类的方法,而是使用 set(),就像在if块中一样。希望有用!
参考 - http://gregpike.net/demos/angular-local-storage/demo/demo.html
答案 1 :(得分:0)
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))
}