AngularJS无法注入服务

时间:2015-02-24 21:09:12

标签: javascript angularjs ionic-framework

我有一个简单的服务,从HTTP端点获取数据将其发送回控制器。

我还在服务中实现了缓存,但是我在控制器中的这行代码中出现了这个错误TypeError: undefined is not a function

myappApi.getItems().then(function(data)

我试图弄明白为什么我无法做到。  这是控制器代码:

.controller('ItemsCtrl',['$scope','myappApi',function($scope, myappApi){
    myappApi.getItems().then(function(data){
        $scope.items = data;
    });
}])

我在这里使用Ioniframework是如何在app.js

中注入我的服务的
angular.module('myApp', ['ionic', 'myApp.controllers', 'myApp.services', 'angular-data.DSCacheFactory'])

这是我服务的代码:

(function() {
    'use strict';

    angular.module('myApp.services',[]).factory('myappApi', ['$http', '$q', '$ionicLoading', 'DSCacheFactory', myappApi]);

    function myappApi($http, $q, $ionicLoading, DSCacheFactory) {


        self.itemsCache = DSCacheFactory.get("itemsCache");

        //to re-use expired cached data if no internet connection
        self.itemsCache.setOptions({
            onExpire: function (key, value) {
                getItems()
                    .then(function () {
                        console.log("items items Cache was automatically refreshed.", new Date());
                    }, function () {
                        console.log("Error getting data. Putting expired item back in the cache.", new Date());
                        self.itemsCache.put(key, value);
                    });
            }
        });

        function getItems() {
            var deferred = $q.defer(),
                cacheKey = "items",
                itemsData = self.itemsCache.get(cacheKey);

            if (itemsData) {
                console.log("Found data inside cache", itemsData);
                deferred.resolve(itemsData);
            } else {
                $http.get("services/data.json")
                    .success(function(data) {
                        console.log("Received data via HTTP");
                        self.itemsCache.put(cacheKey, data);
                        deferred.resolve(data);
                    })
                    .error(function() {
                        console.log("Error while making HTTP call.");
                        deferred.reject();
                    });
            }
            return deferred.promise;
        }

        return {
            getItems: getItems
        };
    };
})();

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

查看角度缓存文件CHANGELOG.md: “ - Angular模块重命名为 angular-cache - DSCacheFactory 重命名为 CacheFactory

你必须改变:

  1. app.js: 而不是'angular-data.DSCacheFactory'使用'angular-cache'
  2. service.js 而不是'DSCacheFactory'使用'CacheFactory'

答案 1 :(得分:1)

在myappApi函数实际定义之前,您似乎已经声明了myappApi工厂。尝试类似:

angular.module('myApp.services',[]).factory('myappApi', ['$http', '$q', '$ionicLoading', 'DSCacheFactory', 
function($http, $q, $ionicLoading, DSCacheFactory) {
  // myappApi code
}]);