LocalStorageにデータを保存します
私のangularjsアプリで欲しいのは、localStorageのデータが変更されたときにアプリがアプリを再レンダリングするということです、どうすればいいですか?
angular localStorageモジュール:
https://github.com/grevory/angular-local-storage
var DemoCtrl = function($scope, localStorageService) {
localStorageService.clearAll();
$scope.$watch('localStorageDemo', function(value){
localStorageService.add('localStorageDemo',value);
$scope.localStorageDemoValue = localStorageService.get('localStorageDemo');
});
$scope.storageType = 'Local storage';
if (!localStorageService.isSupported()) {
$scope.storageType = 'Cookie';
}
};
さらに考えた後、localStorageが変更された場合に通知を受け取ることができるように、setItemでブロードキャストするようにモジュールを変更する必要があるかもしれません。たぶんフォークと50行目あたり:
localStorage.setItem(prefix+key, value);
$rootScope.$broadcast('LocalStorageModule.notification.setItem',{key: prefix+key, newvalue: value}); // you could broadcast the old value if you want
または、ライブラリの最近のバージョンでは、ケーシングが変更されました
$rootScope.$broadcast('LocalStorageModule.notification.setitem',{key: prefix+key, newvalue: value});
次に、コントローラーで次のことができます。
$scope.$on('LocalStorageModule.notification.setItem', function(event, parameters) {
parameters.key; // contains the key that changed
parameters.newvalue; // contains the new value
});
次に、2番目のオプションのデモを示します。デモ: http://beta.plnkr.co/lpAm6SZdm2oRBm4LoIi1
** 更新しました **
私はそのプロジェクトを分岐し、このプロジェクトを使用したいイベントにここに通知を含めました: https://github.com/sbosell/angular-local-storage/blob/master/localStorageModule.js
オリジナルのライブラリが私のPRを受け入れたと思います。このライブラリが好きな理由は、ブラウザがローカルストレージをサポートしていない場合に備えて、Cookieのバックアップがあるためです。
ちなみに、AngularJS用のngStorageという別のlocalStorageモジュールを作成しました。
https://github.com/gsklee/ngStorage
使い方は非常に簡単です。
JavaScript
$scope.$storage = $localStorage.$default({
x: 42
});
[〜#〜] html [〜#〜]
<button ng-click="$storage.x = $storage.x + 1">{{$storage.x}}</button>
そして、すべての変更は自動的に同期されます-他のブラウザのタブで発生する変更も!
デモと例については、GitHubプロジェクトページをご覧ください;)
最近、モジュールを作成して、localStorageキーを$ scope変数にバインドし、オブジェクト、配列、ブール値などをlocalStorage内に直接格納できるようにしました。
$scope.$on("LocalStorageModule.notification.setitem", function (key, newVal, type) {
console.log("LocalStorageModule.notification.setitem", key, newVal, type);
});
$scope.$on("LocalStorageModule.notification.removeitem", function (key, type) {
console.log("LocalStorageModule.notification.removeitem", key, type);
});
$scope.$on("LocalStorageModule.notification.warning", function (warning) {
console.log("LocalStorageModule.notification.warning", warning);
});
$scope.$on("LocalStorageModule.notification.error", function (errorMessage) {
console.log("LocalStorageModule.notification.error", errorMessage);
});
https://github.com/grevory/angular-local-storage#getstoragetype を使用するときに呼び出すこのイベント
アプリの設定で
myApp.config(function (localStorageServiceProvider) {
localStorageServiceProvider
.setPrefix('myApp')
.setStorageType('sessionStorage')
.setNotify(true, true)
});