当我将Rails 4 / Angular应用程序推入生产环境时,出现以下错误:
Uncaught Error: [$injector:modulerr] Failed to instantiate module app due to:
Error: [$injector:unpr] Unknown provider: e
我应该提到它在开发中非常有效。 据我所知,这很可能是由于Rails将生产中的js缩小了。大多数人用来解决此问题的解决方案是使用另一种在Angular中注入依赖项的方法,我正在这样做。我已经两次遍历我的应用程序,现在再次检查我是否已经正确进行了依赖注入。
我还没有尝试过的一件事是使用箭头函数代替传统的function(){}
表示法。这值得尝试吗?
我将包含我的app.js代码,以便您了解我的工作方式。我有几个控制器和工厂,但是除非有人认为我应该这样做,否则我认为此时不必包括这些控制器和工厂。
app.js
var app = angular.module('app', ['ui.router', 'restangular', 'Devise']);
app.config([
"$httpProvider",
function($httpProvider) {
var token = $('meta[name=csrf-token]').attr('content');
$httpProvider.defaults.headers.common['X-CSRF-Token'] = token;
$httpProvider.defaults.headers.common['Cache-Control'] = 'no-cache';
}
]);
app.config([
'RestangularProvider',
function(RestangularProvider) {
RestangularProvider.setRequestSuffix('.json');
RestangularProvider.setDefaultHttpFields({"content-type": "application/json"});
}
]);
app.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider){
$urlRouterProvider.otherwise("/");
$stateProvider
.state("home", {
url: "/",
templateUrl: '/templates/home/index.html',
controller: "HomeCtrl"
})
.state("providers", {
url: "/providers",
abstract: true,
template: '<div ui-view></div>'
})
.state("providers.show", {
url: "/:id",
templateUrl: '/templates/providers/show.html',
controller: "ProviderShowCtrl"
})
.state("procedures", {
url: "/procedures",
abstract: true,
template: '<div ui-view></div>'
})
.state("procedures.show", {
url: "/:id",
templateUrl: '/templates/procedures/show.html',
controller: "ProcedureShowCtrl"
});
}]);
app.factory("_", ['$window', function($window){
return $window._;
}]);
这是我的application.js文件:
//= require jquery
//= require jquery_ujs
//= require angular
//= require angular-devise
//= require angular-ui-router.min.js
//= require underscore-min.js
//= require restangular.min.js
//= require_tree .
感谢您的帮助。
答案 0 :(得分:0)
我创建了一个新的存储库和heroku应用。然后,我将所有内容复制并粘贴到原始应用程序中,再粘贴到新应用程序中,现在一切正常。