将项目推送到存储在 LocalStorage 中的数组时遇到问题

Troubling on pushing item on array that is stored in LocalStorage

我有两个离子页面 1) 菜单项 2) 您的订单 在 'Menu Items' 页面中有菜单项列表,从中选择并添加每个菜单,然后将其传递到 'Yours Order' 页面。从 'Menu Items' 页面,我将每个项目作为 JSON 对象发送,然后我试图将其推送到 'Yours Order' 页面上的数组 'orders' 上。然后,我将该数组存储到 LocalStorage。在这里,对于第一项它有效但是当我尝试输入下一项时,返回到菜单项页面,第一个被替换并且只存储最新的一个我实际上不想要的。我想将多个项目推送到订购页面。有什么解决办法??

[这是 "Menu Items" 页面中的处理程序,每个项目从这里发送到 'Yours Order' 页面。]

 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)
   }

将 else 块中的最后一行更改为 -

this.localStorageService.set('order', temp1)

localStorageService中没有add()等方法,使用set()代替,就像你在if块中所做的那样.希望有用!

参考 - http://gregpike.net/demos/angular-local-storage/demo/demo.html

Array.push returns 数组的新长度,不是数组的引用或副本。如另一个答案所述, 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))
}