Edited at

AuraStorageServiceの使用

More than 3 years have passed since last update.

$A.storageServiceからAuraStorageServiceにアクセスでき、キーバリューストア的なストレージを使うことができます。

var myStorage = $A.storageService.getStorage("myStorage");

if (!myStorage)
myStorage = $A.storageService.initStorage("myStorage");
myStorage.put("key", "value");
myStorage.get("key", function(value){
$A.assert("value" == value);
});

var yourStorage = $A.storageService.getStorage("yourStorage");
if (!yourStorage)
yourStorage = $A.storageService.initStorage("yourStorage");
yourStorage.get("key", function(value){
$A.assert($A.util.isUndefined(value));
});

storage名が違うとキーが同じでも値は保持されていません。

getメソッドの戻り値はvoidで、コールバック関数で値を受け取らなければならないのが辛いところです。

(ちなみに上記コードでは格好をつけてassertメソッドを呼んでいますが、assertメソッドの中身は現在空のようなので条件がfalseになっても何も起きません。必要な方は下記のように定義しておきましょう。)

$A.assert = function(condition, msg) {

if (!condition) { $A.error(msg||"Assertion failed"); $A.trace(); }
};

initStorageの2つ目の引数では永続性の設定が可能です。trueにするとWebSQLStorageAdapterが、falseにするとMemoryStorageAdapterが選択されるようです。永続化していると、ページ遷移しても値を保持し続けることができます。

var myStorage = $A.storageService.getStorage("myStorage");

if (!myStorage)
myStorage = $A.storageService.initStorage("myStorage", true);
myStorage.get("key", function(oldValue){
console.log("value before put=?" + oldValue);
myStorage.put("key", new Date().toLocaleString());
myStorage.get("key", function(newValue){
console.log("value after put=?" + newValue);
});
});

WebSQLStorageAdapterでは値をjsonにして格納していましたので、オブジェクトの格納時はご注意ください。

上記ドキュメントに記載されているinitStorageのその他の引数については調べていませんが、少なくともdebugLoggingEnabledtrueにしてもログは出力されないようです。

気になる使いどころですが、例えば、UIで選択したソート項目などを保持する目的には有用でしょうか?

なお、storage名が同じだと別コンポーネントからもアクセス可能です。別名前空間、別アプリからもアクセス可能かは確認していませんが、もし可能だった場合は、ストレージ名に名前空間やアプリ名、コンポーネント名などを含む規約にしないと、思わぬ不具合の原因になりそうですので、試した方は結果を教えていただけると嬉しいです。