Ian Ian - 7 months ago 23
Javascript Question

Uncaught Error: [$injector:unpr] Unknown provider Ionic Framework/AngularJS

Following the local storage tutorial on the Ionic blog, I'm trying to set/get a localStorage value when my Ionic app runs but I get the error message:

Uncaught Error: [$injector:unpr] Unknown provider: $localstorageProvider <- $localstorage


My app.js code:

angular.module('starter', ['ionic', 'starter.controllers', 'starter.services'])

.run(function($ionicPlatform, $localstorage) {
$ionicPlatform.ready(function() {
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
if(window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if(window.StatusBar) {
// org.apache.cordova.statusbar required
StatusBar.styleDefault();
}

$localstorage.set('name', 'Ian');
console.log($localstorage.get('name'));
});
})


And services.js:

angular.module('starter.services', [])

.factory('localstorage', ['$window', function($window) {
return {
set: function(key, value) {
$window.localStorage[key] = value;
},
get: function(key, defaultValue) {
return $window.localStorage[key] || defaultValue;
},
setObject: function(key, value) {
$window.localStorage[key] = JSON.stringify(value);
},
getObject: function(key) {
return JSON.parse($window.localStorage[key] || '{}');
}
}
}]);


Not sure what I'm missing here.

EDIT: If I change my app.js code to the following, it works as expected:

angular.module('starter', ['ionic', 'starter.controllers', 'starter.services'])

.run(function($ionicPlatform, $localstorage) {
$ionicPlatform.ready(function() {
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
if(window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if(window.StatusBar) {
// org.apache.cordova.statusbar required
StatusBar.styleDefault();
}

window.localStorage.setItem('name', 'Ian');
console.log(window.localStorage.getItem('name'));

});
})

Ian Ian
Answer

Circling back to this, I was able to fix it by injecting $window:

.run(function($ionicPlatform, $window ) {

Then I was able to get/set by using:

$window.localStorage.setItem( 'name', 'Ian' );
$window.localStorage.getItem( 'name' ); // Ian
Comments