diff --git a/README.md b/README.md
index 4ef811c..5b9c671 100644
--- a/README.md
+++ b/README.md
@@ -175,7 +175,8 @@ myApp.controller('MainCtrl', function($scope, localStorageService) {
###get
Directly get a value from local storage.
If local storage is not supported, use cookies instead.
-**Returns:** `value from local storage`
+**Usage:** `localStorageService.get(key, defaultValue[optional])`
+**Returns:** `value from local storage, defaultValue if no value is stored`
```js
myApp.controller('MainCtrl', function($scope, localStorageService) {
//...
diff --git a/bower.json b/bower.json
index 6788478..cac508c 100644
--- a/bower.json
+++ b/bower.json
@@ -28,6 +28,6 @@
],
"devDependencies": {
"angular": "~1.x",
- "angular-mocks": "~1.2.1"
+ "angular-mocks": "~1.x"
}
}
diff --git a/package.json b/package.json
index caeef92..0f76f46 100644
--- a/package.json
+++ b/package.json
@@ -30,7 +30,7 @@
"grunt-contrib-concat": "*",
"grunt-contrib-jshint": "~0.8.0",
"grunt-contrib-uglify": "*",
- "grunt-karma": "latest",
+ "grunt-karma": "~0.11.1",
"karma": "~0.12.16",
"karma-jasmine": "~0.1.5",
"karma-coverage": "^0.2.6",
diff --git a/src/angular-local-storage.js b/src/angular-local-storage.js
index 0e3048e..cf5e6ab 100644
--- a/src/angular-local-storage.js
+++ b/src/angular-local-storage.js
@@ -146,21 +146,25 @@ angularLocalStorage.provider('localStorageService', function() {
// Directly get a value from local storage
// Example use: localStorageService.get('library'); // returns 'angular'
- var getFromLocalStorage = function (key) {
+ var getFromLocalStorage = function (key, defaultValue) {
if (!browserSupportsLocalStorage || self.storageType === 'cookie') {
if (!browserSupportsLocalStorage) {
$rootScope.$broadcast('LocalStorageModule.notification.warning','LOCAL_STORAGE_NOT_SUPPORTED');
}
- return getFromCookies(key);
+ return getFromCookies(key, defaultValue);
}
var item = webStorage ? webStorage.getItem(deriveQualifiedKey(key)) : null;
// angular.toJson will convert null to 'null', so a proper conversion is needed
// FIXME not a perfect solution, since a valid 'null' string can't be stored
if (!item || item === 'null') {
- return null;
+ if (isUndefined(defaultValue)) {
+ return null;
+ } else {
+ return defaultValue;
+ }
}
try {
@@ -323,7 +327,7 @@ angularLocalStorage.provider('localStorageService', function() {
// Directly get a value from a cookie
// Example use: localStorageService.cookie.get('library'); // returns 'angular'
- var getFromCookies = function (key) {
+ var getFromCookies = function (key, defaultValue) {
if (!browserSupportsCookies) {
$rootScope.$broadcast('LocalStorageModule.notification.error', 'COOKIES_NOT_SUPPORTED');
return false;
@@ -344,7 +348,12 @@ angularLocalStorage.provider('localStorageService', function() {
}
}
}
- return null;
+
+ if (isUndefined(defaultValue)) {
+ return null;
+ } else {
+ return defaultValue;
+ }
};
var removeFromCookies = function (key) {
diff --git a/test/spec/localStorageSpec.js b/test/spec/localStorageSpec.js
index 7390c94..723f01c 100644
--- a/test/spec/localStorageSpec.js
+++ b/test/spec/localStorageSpec.js
@@ -280,6 +280,20 @@ describe('localStorageService', function() {
expectRemoving('ls.lorem.ipsum')
));
+ it('should be able to get with a default value', inject(function($rootScope, localStorageService) {
+ expect([1,2,3]).toEqual(localStorageService.get('property', [1,2,3]));
+ }));
+
+ it('should be able to get with a default value and honor stored value', inject(function($rootScope, localStorageService) {
+ localStorageService.set('property', 'hello');
+ expect('hello').toEqual(localStorageService.get('property', [1,2,3]));
+ }));
+
+ it('should be able to get with a default value and not store default', inject(function(localStorageService) {
+ expect([1,2,3]).toEqual(localStorageService.get('property', [1,2,3]));
+ expect(null).toEqual(localStorageService.get('property'));
+ }));
+
it('should be able to remove multiple items', inject(function($window, localStorageService) {
elmSpy = spyOn($window.localStorage, 'removeItem').andCallThrough();
localStorageService.remove('lorem.ipsum1', 'lorem.ipsum2', 'lorem.ipsum3');
@@ -600,6 +614,20 @@ describe('localStorageService', function() {
expect(localStorageService.get('cookieKey')).toEqual('cookieValue');
}));
+ it('should be able to get cookie with a default value', inject(function($rootScope, localStorageService) {
+ expect([1,2,3]).toEqual(localStorageService.get('cookieKey', [1,2,3]));
+ }));
+
+ it('should be able to get cookie with a default value and honor stored value', inject(function($rootScope, localStorageService) {
+ localStorageService.set('cookieKey', 'hello');
+ expect('hello').toEqual(localStorageService.get('cookieKey', [1,2,3]));
+ }));
+
+ it('should be able to get cookie with a default value and not store default', inject(function(localStorageService) {
+ expect([1,2,3]).toEqual(localStorageService.get('cookieKey', [1,2,3]));
+ expect(null).toEqual(localStorageService.get('cookieKey'));
+ }));
+
it('should be able to set individual cookie with expiry', function() {
inject(expectCookieExpiry(new Date().addDays(10)));
});