web-dev-qa-db-ja.com

Rails 3 + anglejs +ミニファイは本番環境では機能しません:不明なプロバイダー:eProvider

縮小を修正するために見つけることができるすべての指示に従いました。

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

そして

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

まだangularはまだ動作することを拒否します。それは常にエラー「不明なプロバイダー:eProvider」をスローします

これがそれを機能させるための私の2つの試みです...誰か助けてもらえますか?

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

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

アセットはすでにプリコンパイルされており、開発モードは本番環境として機能するように構成されているため、「Rails」で機能する(機能しない)ことを確認できるはずです。

22
jemminger

それを見つけた!彼らはインジェクション修正をサービスにも適用するとは決して言いませんでした...解決策はこれを変更することです:

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}
      });
    }]);
60
jemminger

ディレクティブ内のコントローラーでもDIを使用することを忘れないでください。何時間もかかりました... CSの例:

違う:

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

正しい:

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

モジュール内での注入が必要な[〜#〜] all [〜#〜]関数定義にDIパターンを適用してください。見逃しがちです。 routeProvider、ファクトリ、サービスなどを使用している場合は、それらすべてにDIパターンを適用する必要があります。それらすべてを捕まえる前に、私は複数回展開することになりました:P

6
Kevin