Ionic2 Native Storage存储/检索数组

时间:2018-01-12 12:34:31

标签: ionic-framework ionic2

我有一个Ionic应用程序,我在其中存储数组和Native-Storage。 这个数组是一个对象数组。

我这样存储了它:

>>> array1:CertainType [] 至少有50个混洗元素

this.nativeStorage.setItem('array1', { property: array1 })
   .then(
      () => { console.log('array1 stored') },
      error => { console.log('array1 not Stored',error)
});

我检索这样的项目:

this.nativeStorage.getItem('array1').then(
    array1 => {  
       //On the Sucess of getting Array1 use it to create Array2
       array2 = array1.splice(0,5); //<-- MY PROBLEM IS HERE
    },
    error => {
        console.error('Error Getting Array', error);
    }
);

我不断收到错误

我认为它是因为存储和检索的过程混淆了数组的类型等。

我试图进行投射:

..array1 as CertainType[]

- EDITED&gt;&gt; 我尝试过stringfying和JSONparsing。

this.nativeStorage.setItem('array1', { property: JSON.stringify(array1)}).then(. . . .

array2 = JSON.parse(array1);

抛出此错误:

ERROR Error: Uncaught (in promise): SyntaxError: Unexpected token o in JSON at position 1
SyntaxError: Unexpected token o in JSON at position 1
    at JSON.parse (<anonymous>)

但我一直在splice()上得到同样的错误。

如果我不使用存储逻辑,代码运行正常....任何线索。我错过了什么? :/

2 个答案:

答案 0 :(得分:1)

在localStorage中存储之前使用JSON stringify,因为它将返回一个promise 就这样做:

​var test = { test: "thing", test2: "thing2", test3: [0, 2, 44] }​​​​​​​;
localStorage.setItem("test", JSON.stringify(test));

var test2 = localStorage.getItem("test");
test = JSON.parse(test2);

答案 1 :(得分:0)

Ionic Native Storage Documentation让我很困惑。

this.nativeStorage.setItem('myitem', {property: 'value', anotherProperty: 'anotherValue'})
  .then(
    () => console.log('Stored item!'),
    error => console.error('Error storing item', error)
  );

我坚持使用这本书并在我的应用上使用几乎相同的代码。但那个词“property”在那里打破了我的职责。

我上面的好贡献者,坚持(感谢上帝)使用JSON.stringifyJSON.parse来保存和检索数据。

所以我做了,但不断出错。然后我意识到:当我尝试检索数据时,我的数组存储在一个Object上。好!但是 UNDER 一个 p-r-o-p-e-r-y 属性..

如果我使用array1.property获取了我的array1,我会得到我想要的东西。

最后,只需稍加改动就可以使它像时钟一样工作:

this.nativeStorage.setItem('array1', JSON.stringfy(array)})
      .then(. . .

this.storage.get('array').then( array1 => {
          console.log(JSON.parse(array1));