New to AngularJs I'm trying to train by building a single page Todo Application. The problem is, I'm having trouble loading a localStorage factory I'm trying to use for this. At the moment i'm stuck on the following error :
Undefined is not a function at routeconfig.resolve.store on app.js line 11.
Here's the code :
app.js
angular.module('TodoAngular', ['ngRoute'])
.config(function($routeProvider) {
'use strict';
var routeConfig = {
controller: 'TodoController' ,
templareUrl: 'app/partials/TodoList.html',
resolve: {
store: function (todoAngularStorage) {
// Récupère le module qui gère le localStorage
return todoAngularStorage.then(function (module) {
module.get(); // Récupère les données
return module;
});
}
}
};
$routeProvider
.when('/todos', routeConfig)
.otherwise({
redirectTo: '/todos'
});
}
);
todoAngularStorage.js
angular.module('TodoAngular')
.factory('todoAngularStorage', function ($http,$injector) {
'use strict';
return $injector.get('localStorage');
})
.factory('localStorage', function($q) {
'use strict';
var STORAGE_ID = 'todoAngularLocalStorage';
var store = {
todos: [],
//récupérer depuis le local storage
_getFromLocalStorage: function(){
return JSON.parse(localStorage.getItem(STORAGE_ID) || '[]');
},
//enregistrer dans le local storage
_saveToLocalStorage: function (todos) {
localstorage.setItem(STORAGE_ID, JSON.stringify(todos));
},
//supprimer un Todo
delete: function (todo) {
//instanciation de l'API Deferred
var deferred = $q.defer();
store.todos.splice(store.todos.indexOf(todo), 1);
store._saveToLocalStorage(store.todos);
deferred.resolve(store.todos);
return deferred.promise;
},
//récupérer les todos
get: function () {
//instanciation de l'API Deferred
var deferred = $q.defer();
angular.copy(store._getFromLocalStorage(), store.todos);
deferred.resolve(store.todos);
return deferred.promise;
},
//ajouter un todo à la fin de la todo list
insert: function (todo) {
//instanciation de l'API Deferred
var deferred = $q.defer();
store.todos.push(todo);
store._saveToLocalStorage(store.todos);
deferred.resolve(store.todos);
return deferred.promise;
}
};
return store;
});
I've been trying to debug it and it appears that the problem comes from the 'module' passed in the function in the following line of my app.js file
return todoAngularStorage.then(function (module) {
I've been following this example (https://github.com/tastejs/todomvc/tree/master/examples/angularjs) while building my app and I really don't see where's my mistake at the moment.
Your
localStorageservice factory is returning an object that doesn't have any property calledthen. You're then returning the same object fromtodoAngularStoragefactory and trying to usethenproperty of the returned value as a function, hence your error. It looks like you just wanted to do this:As a sidenote, you should be able to find this out by debugging (setting a breakpoint at the place where the problem is and looking at the variable values) and looking at your code (where did that value come from).