在推送存储在LocalStorage

时间:2018-03-29 11:13:57

标签: javascript ionic2 local-storage angular-local-storage

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

2 个答案:

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