Javascript错误未知的提供者:在Rails缩小Angularjs之后的tProvider< -t

时间:2013-09-23 00:29:30

标签: ruby-on-rails angularjs minify

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

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

JS ERROR

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 个答案:

答案 0 :(得分:48)

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

如果它在缩小之前有效,但之后不能使用,那么它必须是一个不使用最小安全注射方法的问题。

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

这是一个让控制器安全的例子。以下是不安全的:

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

为了使它成为minsafe,我们将函数调用封装在一个数组中,该数组以我们想要注入的内容开头,并以相同的参数顺序结束于函数调用中:

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

答案 1 :(得分:12)

我对gem hiravgandhi / angularjs-rails

有同样的问题

我能够通过更改config / environments / production.rb中的设置来完成生产中的minifcation

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

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

答案 2 :(得分:7)

我遇到了同样的问题,我发现问题不在.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');
}]);

答案 3 :(得分:0)

我对angular-blockUI模块有类似的问题。猜猜我可能不得不使用该文件的预先缩小版本作为单独的东西加载而不是包含到Web Essentials包中。我们通过凉亭得到的一些代码并没有为捆绑和编码做好准备。缩小了......