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.
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}
});
}]);
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()
]
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