$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
のその他の引数については調べていませんが、少なくともdebugLoggingEnabled
をtrue
にしてもログは出力されないようです。
気になる使いどころですが、例えば、UIで選択したソート項目などを保持する目的には有用でしょうか?
なお、storage名が同じだと別コンポーネントからもアクセス可能です。別名前空間、別アプリからもアクセス可能かは確認していませんが、もし可能だった場合は、ストレージ名に名前空間やアプリ名、コンポーネント名などを含む規約にしないと、思わぬ不具合の原因になりそうですので、試した方は結果を教えていただけると嬉しいです。