2017-05-04 12 views
0

オブジェクトを連結して、HTML5 localStorage内のオブジェクトの配列にする必要があります。Angular JSのlocalStorageでオブジェクトを連結する方法

まず、データがあるかどうかを確認します。存在しない場合は、その項目を追加するか、既存の項目に別の項目を追加して配列に変換します。

if(type === 'server'){ 
    var old = $window.localStorage.getItem('selectedServers'); 
    if(old === null) 
     localStorage.setItem('selectedServers', JSON.stringify(item)); 
    else 
     localStorage.setItem('selectedServers', JSON.stringify(old.concat(item))); 
} 

しかし、このコードは機能しません。 JSON.stringify(old+data)でも予期しない結果が得られます。

予期しない結果が生じました\秒です。 itemここに追加または追加するオブジェクトがあります。

Angular JSで同じことを達成する方法は?

+0

「アイテム」とは何ですか? – dfsq

+0

@dfsq追加する新しいオブジェクト。 – StrugglingCoder

+0

なぜオブジェクトを1つのケースに格納し、配列を別のケースに格納したいのですか?常に配列を格納します。 – dfsq

答えて

1

ローカルストレージが唯一あなたがJSON.stringifyを使用する理由です、文字列を格納することができますconcat()方法

if (type === 'server') { 
    var old = $window.localStorage.getItem('selectedServers'); 
    if (old === null) { 
     var arr = [item]; //Create ARRAY 
     $window.localStorage.setItem('selectedServers', JSON.stringify(arr)); 
    } else { 
     old = JSON.parse(old); 
     $window.localStorage.setItem('selectedServers', JSON.stringify(old.concat(item))); 
    } 
} 
+0

訂正していただきありがとうございます。しかし、私はまだ古いアイテムを参照してください。その後、配列の長さを2に更新する必要がある新しい項目は存在しません。そして.concatの代わりに.pushを実行すると、文字列化された配列に値2が得られます。 – StrugglingCoder

+0

コンソールでold.concat(item)が変更された追加値を返しても、なんらかの理由でlocalStorageに反映されません。それは最初の値だけを保持しています。 – StrugglingCoder

+0

@StrugglingCoder、That weird、どうやってチェックしていますか? – Satpal

0

を持っていない文字列を永続化されるあなたは、concat()を使用する前に解析しなければなりません。メソッドconcat()は文字列には存在しないので、 "文字列化された"配列を格納していると思います。 その場合、配列を取得するために文字列を解析し、次に新しい配列を連結する必要があります(代わりにpush()を使用して、1つの要素を持つ配列を作成します)。

関連する問題