未定义不是函数和依赖项注入

Bcarmard

AngularJs的新手,我正在尝试通过构建一个单页面的Todo Application进行培训。问题是,我无法加载要用于此的localStorage工厂。目前,我陷入了以下错误:

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

我一直在尝试调试它,看来问题出在我app.js文件下面一行的函数中传递的“模块”

return todoAngularStorage.then(function (module) {

在构建我的应用程序时,我一直在关注这个示例(https://github.com/tastejs/todomvc/tree/master/examples/angularjs),但现在我真的看不出我的错误在哪里。

hon2a

您的localStorage服务工厂返回的对象没有称为的任何属性then然后,您要从todoAngularStorage工厂返回相同的对象,并尝试then将返回值的属性用作函数,因此会出现错误。看来您只是想这样做:

return todoAngularStorage.get().then(function () {
    return todoAngularStorage;
});

附带说明,您应该能够通过调试(在问题所在的位置设置断点并查看变量值)并查看代码(该值来自何处)来找到答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章