在我的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'));
}
};
}]);
答案 0 :(得分:1)
尝试在mangle: false
:
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'
}
]
}
},