令人不安的是在localstorage中存储的数组上推动项目



我有两个离子页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

相关内容

  • 没有找到相关文章