将项目推送到存储在 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))
}
我有两个离子页面 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))
}