19

编译资产时打开资产放大后,我的 Rails 应用程序无法运行。我将 Angular 控制器转换为使用括号表示法,并得到以下错误,有没有办法调试它?

编译好的application.js https://gist.github.com/jianbo/6665161

JS 错误

Error: Unknown provider: tProvider <- t
at Error (<anonymous>)
at me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:21665
at Object.i [as get] (me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:20671)
at me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:21753
at i (localme:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:20671)
at n (me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:20805)
at Object.r [as instantiate] (me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:21447)
at me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:818:604
at me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:28889
at r (me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:8277) application-4f6cd4e170fc6ce5d181d869af318557.js:818
(anonymous function) application-4f6cd4e170fc6ce5d181d869af318557.js:818
(anonymous function) application-4f6cd4e170fc6ce5d181d869af318557.js:818
r.$broadcast application-4f6cd4e170fc6ce5d181d869af318557.js:818
(anonymous function) application-4f6cd4e170fc6ce5d181d869af318557.js:818
l application-4f6cd4e170fc6ce5d181d869af318557.js:818
l application-4f6cd4e170fc6ce5d181d869af318557.js:818
(anonymous function) application-4f6cd4e170fc6ce5d181d869af318557.js:818
r.$eval application-4f6cd4e170fc6ce5d181d869af318557.js:818
r.$digest application-4f6cd4e170fc6ce5d181d869af318557.js:818
r.$apply application-4f6cd4e170fc6ce5d181d869af318557.js:818
r application-4f6cd4e170fc6ce5d181d869af318557.js:818
m application-4f6cd4e170fc6ce5d181d869af318557.js:818
v.onreadystatechange application-4f6cd4e170fc6ce5d181d869af318557.js:818
4

4 回答 4

48

这个错误本身就是 Angular 说它不知道为 't' 注入什么。这意味着“t”必须是您在某处注射的一个缩小名称。

如果它在缩小之前但不能在缩小之后工作,那么它一定是某个地方没有使用最小安全注入方法的问题。

我会检查以确保您所做的一切都是最小安全的,并且您没有试图缩小 angular.js 本身的非最小安全版本。始终使用 Angular 包中的 .min 而不是缩小自己的(或者如果您确实想缩小自己的,请确保它是 minsafe 版本)。

这是使控制器最小安全的示例。以下不是 minsafe:

angular
    .module('myModule')
    .controller('MyCtrl', function($scope, myService) { 
        //your non-minsafe controller 
    });

为了使其最安全,我们将函数调用封装在一个数组中,该数组以我们要注入的内容开始,并以相同的参数顺序结束函数调用:

angular
    .module('myModule')
    .controller('MyCtrl', ['$scope', 'myService', function($scope, myService) { 
        //your minsafe controller 
    }]);
于 2013-09-23T00:35:19.767 回答
12

我对 gem hiravgandhi/angularjs-rails 有同样的问题

通过更改我在 config/environments/production.rb 中的设置,我能够在生产中进行缩小工作

config.assets.js_compressor = Uglifier.new(mangle: false)

按照 gem 安装说明的说明,使用带有 hiravgandhi/angularjs-rails gem 的 Rails 4.0.2 应用程序。

于 2014-01-05T22:51:55.453 回答
8

我遇到了同样的问题,我发现问题不在 .controller 调用中,而在 .config 中,它不是缩小安全的。

var app = angular.module('myModule', ['restangular']);

app.config(function(RestangularProvider) {
    RestangularProvider.setDefaultHeaders({'Content-Type': 'application/json'});
    RestangularProvider.setBaseUrl('http://myapi.com/api/v1');
});

var app = angular.module('myModule', ['restangular']);

app.config(['RestangularProvider', function(RestangularProvider) {
    RestangularProvider.setDefaultHeaders({'Content-Type': 'application/json'});
    RestangularProvider.setBaseUrl('http://myapi.com/api/v1');
}]);
于 2015-06-11T01:00:26.670 回答
0

我对 angular-blockUI 模块有类似的问题。我猜我可能不得不使用该文件的预压缩版本作为单独的东西来加载,而不是包含在 Web Essentials 包中。我们通过 bower 获得的一些代码根本没有准备好进行捆绑和缩小......

于 2014-08-13T13:52:54.840 回答