Je stocke des données dans le localStorage
ce que je veux dans mon application angularjs, c'est que lorsque les données du localStorage ont changé, l'application redirige l'application, comment faire?
Il y a un 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';
}
};
Après réflexion, vous devrez peut-être modifier le module pour diffuser sur setItem afin de pouvoir être averti si le localStorage a été modifié. Peut-être à la fourche et autour de la ligne 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
ou dans la version récente de la bibliothèque, le boîtier a été changé
$rootScope.$broadcast('LocalStorageModule.notification.setitem',{key: prefix+key, newvalue: value});
Ensuite, dans votre contrôleur, vous pouvez:
$scope.$on('LocalStorageModule.notification.setItem', function(event, parameters) {
parameters.key; // contains the key that changed
parameters.newvalue; // contains the new value
});
Voici une démo de la 2ème option: Démo: http://beta.plnkr.co/lpAm6SZdm2oRBm4LoIi1
** Mis à jour **
J'ai bifurqué ce projet et j'ai inclus les notifications ici dans le cas où vous souhaitez utiliser ce projet: https://github.com/sbosell/angular-local-storage/blob/master/localStorageModule.js
Je crois que la bibliothèque d'origine a accepté mon PR. La raison pour laquelle j'aime cette bibliothèque est qu'elle a une sauvegarde des cookies au cas où le navigateur ne prend pas en charge le stockage local.
Par ailleurs, j'ai créé un autre module localStorage pour AngularJS qui s'appelle ngStorage :
https://github.com/gsklee/ngStorage
L'utilisation est ultra simple:
JavaScript
$scope.$storage = $localStorage.$default({
x: 42
});
[~ # ~] html [~ # ~]
<button ng-click="$storage.x = $storage.x + 1">{{$storage.x}}</button>
Et chaque changement est synchronisé automatiquement - même les changements qui se produisent dans d'autres onglets du navigateur!
Consultez la page du projet GitHub pour plus de démos et d'exemples;)
J'ai récemment créé un module qui vous permet de simplement lier une clé localStorage à une variable $ scope et également de stocker des objets, des tableaux, des booléens et plus directement à l'intérieur du 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);
});
cet événement appelle lors de l'utilisation https://github.com/grevory/angular-local-storage#getstoragetype
dans la configuration de l'application
myApp.config(function (localStorageServiceProvider) {
localStorageServiceProvider
.setPrefix('myApp')
.setStorageType('sessionStorage')
.setNotify(true, true)
});