2014-12-14 3 views
0

Новое в AngularJs Я пытаюсь обучить, создав одностраничное приложение Todo. Проблема в том, что у меня возникли проблемы с загрузкой фабрики localStorage, которую я пытаюсь использовать для этого. На данный момент я застрял на следующей ошибки:Undefined не является функцией и зависимой инъекцией

Undefined is not a function at routeconfig.resolve.store on app.js line 11. 

Вот код:

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; 
}); 

Я пытается отладить его, и кажется, что проблема исходит из «модуля», переданного в функции в следующей строке моегофайла

return todoAngularStorage.then(function (module) { 

Я следовал этому примеру (https://github.com/tastejs/todomvc/tree/master/examples/angularjs) при строительстве моего приложения, и я действительно не вижу, где моя ошибка в данный момент.

ответ

0

Ваша фабрика обслуживания localStorage возвращает объект, не имеющий свойства, называемого then. Затем вы возвращаете тот же объект с фабрики todoAngularStorage и пытаетесь использовать свойство then возвращаемого значения как функции, следовательно, ваша ошибка. Похоже, вы просто хотели сделать это:


Как Замечание, вы должны быть в состоянии найти это отладкой (установив точку останова в том месте, где эта проблема стоит и смотрит на значения переменных) и просмотр вашего кода (откуда взялось это значение).

+0

Ty для ответа, я пытаюсь решить его с вашего совета. Я вернусь к вам, если это поможет. – Bcarmard

+0

Я просмотрел ваш код и обновил свой ответ (я изменил часть «что я думаю, вы хотите сделать»). – hon2a

+0

Хорошо, спасибо, вы были правы, проблема решена. – Bcarmard