ruby on rails - Error de Javascript Proveedor desconocido: tProvider<- t after Rails minification Angularjs
ruby-on-rails minify (4)
La aplicación My Rails no funciona después de activar la ampliación de activos cuando se compilan los activos. Convertí los controladores Angular para usar la notación de corchetes y obtengo el siguiente error, ¿hay alguna forma de depurar esto?
Application.js compilado https://gist.github.com/jianbo/6665161
ERROR 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
Este error en sí mismo es Angular diciendo que no sabe qué inyectar para ''t''. Lo que significa que ''t'' debe ser un nombre minificado para una de sus inyecciones en algún lugar.
Si funciona antes de la minificación, pero no después, tiene que haber un problema con algo que no utiliza el método de inyección min-safe.
Me aseguraría de que todo lo que esté haciendo sea seguro y que no esté tratando de minimizar la versión no segura de angular.js. Siempre use el .min que viene en el paquete angular en lugar de minimizar el suyo (o si desea minimizar el suyo, asegúrese de que sea la versión segura).
Aquí hay un ejemplo de cómo hacer que un controlador sea seguro. Lo siguiente NO es seguro para los minutos:
angular
.module(''myModule'')
.controller(''MyCtrl'', function($scope, myService) {
//your non-minsafe controller
});
Para hacerlo seguro, encapsulamos la llamada a la función en una matriz que comienza con las cosas que queremos inyectar, y termina en la llamada a la función con el mismo orden de argumentos:
angular
.module(''myModule'')
.controller(''MyCtrl'', [''$scope'', ''myService'', function($scope, myService) {
//your minsafe controller
}]);
Tengo el mismo problema con la gema hiravgandhi / angularjs-rails
Pude trabajar en OFF la minifcación en producción cambiando mi configuración en config / environment / production.rb
config.assets.js_compressor = Uglifier.new (mangle: false)
Usar una aplicación Rails 4.0.2 con la gema hiravgandhi / angularjs-rails como se indica en las instrucciones de instalación de la gema.
Tengo un problema similar con el módulo de UI de bloque angular. Supongo que es posible que tenga que usar la versión predeterminada de ese archivo como un elemento separado para cargar en lugar de incluirlo en el paquete de Web Essentials. Algunos códigos que obtenemos a través de bower no están preparados para empaquetar y minimizar ...
Tuve un mismo problema y descubrí que el problema no estaba en la llamada del controlador, estaba en .config donde no era seguro para minificación.
antes de
var app = angular.module(''myModule'', [''restangular'']);
app.config(function(RestangularProvider) {
RestangularProvider.setDefaultHeaders({''Content-Type'': ''application/json''});
RestangularProvider.setBaseUrl(''http://myapi.com/api/v1'');
});
Después
var app = angular.module(''myModule'', [''restangular'']);
app.config([''RestangularProvider'', function(RestangularProvider) {
RestangularProvider.setDefaultHeaders({''Content-Type'': ''application/json''});
RestangularProvider.setBaseUrl(''http://myapi.com/api/v1'');
}]);