Rails 3 + angularjs + minification does not work i

2019-03-10 23:16发布

I've followed all the instructions I can find for fixing minification, e.g.

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

and

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

yet angular refuses to work still. It always throws the error "Unknown provider: eProvider"

Here are my two attempts to get it working... can anyone help?

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

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

They've already had the assets precompiled and development mode is configured to work as production, so you should just be able to "rails s" to see it (not) work.

3条回答
一夜七次
2楼-- · 2019-03-10 23:29

Make sure to apply the DI pattern to ALL function definitions that require injection within your module. It can be easy to miss one. If you're using a routeProvider, factory, services, etc., they all need to have the DI pattern applied. I ended up deploying multiple times before I caught them all :P

查看更多
贪生不怕死
3楼-- · 2019-03-10 23:38

Remember, to also use DI on controllers within directives. Took me hours... CS example:

wrong:

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

right:

controller: ["$scope"
  ($scope) ->
    $scope.closeModal = ->
      ModalService.close()
]
查看更多
你好瞎i
4楼-- · 2019-03-10 23:41

Found it! They never said to apply the injection fixes to services too... The solution is to change this:

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

to this:

angular.module('itemServices', ['ngResource']).
    factory('Item', ['$resource', function($resource){
      return $resource('items/:item_id.json', {}, {
        query: {method:'GET', params:{ item_id: 'all' }, isArray:true}
      });
    }]);
查看更多
登录 后发表回答