Rails 3 + angularjs + minification在生产中不起作用:未知提供者:eProvider

时间:2012-11-19 17:59:35

标签: ruby-on-rails angularjs assets production minify

我已经按照我可以找到的所有说明来修复缩小,例如

var MyController = function(renamed$scope, renamedGreeter) {
...
}
MyController.$inject = ['$scope', 'greeter'];

someModule.factory('greeter', ['$window', function(renamed$window) {
...;
}]);

然而棱角仍拒绝工作。它总是抛出错误“Unknown provider:eProvider”

以下是我试图让它工作的两次尝试......任何人都可以帮忙吗?

https://github.com/jemminger/angular-test1

https://github.com/jemminger/angular-test2

他们已经预先编译了资产,并且开发模式已配置为生产,因此您应该能够“跟踪”以查看(不)工作。

3 个答案:

答案 0 :(得分:60)

发现它!他们从未说过将注射修复应用于服务......解决方案是改变这一点:

angular.module('itemServices', ['ngResource']).
    factory('Item', function($resource){
      return $resource('items/:item_id.json', {}, {
        query: {method:'GET', params:{ item_id: 'all' }, isArray:true}
      });
    });

到此:

angular.module('itemServices', ['ngResource']).
    factory('Item', ['$resource', function($resource){
      return $resource('items/:item_id.json', {}, {
        query: {method:'GET', params:{ item_id: 'all' }, isArray:true}
      });
    }]);

答案 1 :(得分:14)

请记住,在指令中的控制器上也使用DI。花了我几个小时...... CS例子:

错误:

controller: ($scope) ->
  $scope.closeModal = ->
    ModalService.close()

右:

controller: ["$scope"
  ($scope) ->
    $scope.closeModal = ->
      ModalService.close()
]

答案 2 :(得分:6)

确保将DI模式应用于需要在模块中进行注入的 ALL 功能定义。很容易错过一个。如果您正在使用routeProvider,工厂,服务等,则他们都需要应用DI模式。在我发现它们之前,我最终部署了多次:P