AngularJS在.run函数中注入服务

时间:2014-04-29 06:51:34

标签: angularjs gruntjs yeoman

在我的AngularJS应用程序中,使用Yeoman,在缩小我的应用程序时出现此错误:

Uncaught Error: [$injector:unpr] Unknown provider: aProvider <- a <- $http <-  AuthenticationService 

我在缩小之前显然没有。

以下是我在单独的runner.js文件中定义的服务:

angular.module('myApp').run(['$rootScope', 'AuthenticationService', 'FlashService', 'SessionService', function ($rootScope, AuthenticationService, FlashService, SessionService) {
   //some code
}]);

我当然想到了缩小时的典型注入错误,但我很难看到我的代码中出现了什么问题......

更新

我的AutenticationService:

angular.module('myApp').factory("AuthenticationService", ['$http', '$rootScope', '$sanitize', 'SessionService', 'FlashService', 'SETTINGS', function($http, $rootScope, $sanitize, SessionService, FlashService, SETTINGS) {

    var cacheSession   = function() {
        SessionService.set('authenticated', true);
    };

    var uncacheSession = function() {
        SessionService.unset('authenticated');
        SessionService.unset('user');
    };

    var loginError = function(response) {
        FlashService.show('warning', response.flash);
    };

    var loginSuccess = function(response) {
        SessionService.set('user', JSON.stringify(response));
        FlashService.clear();
    };

    var logoutSuccess = function(response) {
        FlashService.show('success', response.flash);
    };

    var sanitizeCredentials = function(credentials) {
        return {
            email: $sanitize(credentials.email),
            password: $sanitize(credentials.password)
        };
    };

    return {
        login: function(credentials) {
            var login = $http.post(SETTINGS.urlBackend+"/auth/login", sanitizeCredentials(credentials));
            login.success(cacheSession);
            login.success(loginSuccess);
            login.error(loginError);
            return login;
        },
        logout: function() {
            var logout = $http.get(SETTINGS.urlBackend+"/auth/logout");
            logout.success(uncacheSession);
            logout.success(logoutSuccess);
            logout.error(loginError);
            return logout;
        },
        isLoggedIn: function() {
            var checked = $http.get(SETTINGS.urlBackend+"/auth/check");
            return (checked && SessionService.get('authenticated'));
        }
    };
}]);

2 个答案:

答案 0 :(得分:1)

尝试在mangle: false

中的Uglify配置中设置Gruntfile.js
grunt.initConfig({
  // ...
  uglify: {
    options: {
      mangle: false
    }
  }
});

我在使用Bower的某些软件包时发生过这种情况。我相信一些Angular UI工具套件由于某种原因不兼容。

答案 1 :(得分:0)

我强烈推荐另一种方法来手动设置角度缩小工作 - 包装&#34;模块&#34; - 控制器,服务,工厂 - 在[]括号中。

使用ng-min module!它是作为Angular的人写的 - 即Brian Ford。但最重要的是它在编写Angular模块时消除了这种复杂性,它们再次变得干净和可读,并且ng-min完成了修复缩小问题的艰苦工作。

我知道这不是你问题的答案,但它可能是你一般面临的问题的解决方案。

//允许使用非minsafe AngularJS文件。自动使它// minsafe兼容,因此Uglify不会破坏ng引用

 ngmin: {
        dist: {
            files: [
                {
                    expand: true,
                    cwd: '.tmp/concat/scripts',
                    src: '*.js',
                    dest: '.tmp/concat/scripts'
                }
            ]
        }
    },