web-dev-qa-db-ja.com

angular jsの縮小後のエラー。エラー:[$ injector:unpr]不明なプロバイダー:eProvider <-e <-makeErrorsDirective

Gulpを使用してjsファイル全体を縮小しました。縮小すると、次のようなエラーが発生しました。

[$injector:unpr] Unknown provider: eProvider <- e <- makeErrorsDirective.

コントローラファイルにカスタムディレクティブがありました。

var myhubdashboardControllers = angular.module('vpdashboardmodule', []);

.directive('mhDashboard', function ($http, authService, apiService) {
    return {
        restrict: 'EA',
        scope: {
            name: '@',
            dash: '@',
            report: '@',
            disname: '@',
            disdesc: '@',
            distot: '@'
        },
        templateUrl: 'views/dashboard/dashboard-direc.html',
        link: function (scope, element, attr) {
            scope.linkChk = scope.name;
            switch (scope.linkChk) {
                case 'Shipped This Week':
                    scope.url = 'erp/JobShipmentList/PostCpsVwShipmentCount';
                    scope.shipstatus = "Departure";
                    scope.period = "ThisWeek";
                    scope.basicfilter = "Open";
                    scope.linkName = "Shipments";
                    scope.linkDesc = "Shipped This Week";
                    break;

})};

これは私のアプリケーションで使用されているコードです。

8
Dhamodharaan M

文字列配列にサービスとコントローラーを挿入する必要があるのには理由があります。

コントローラにスコープを注入する場合は、を使用する必要があります

angular.module('yourApp')
    .controller('yourController',['$scope',function($scope){
    }]);

ミニファイは変数名を変更し、サービスまたはコントローラーを挿入するときにその文字列の配列を使用しない場合は、次のようになります。

 angular.module('yourApp')
    .controller('yourController',function(e){
    });

したがって、angularは、「e」が何を表すのかを理解できないため、エラーになります。順序も重要であることを常に忘れないでください。

.directive('mhDashboard', ['$http','authService','apiService', function ($http, authService, apiService) {
    return {
        restrict: 'EA',
        scope: {
            name: '@',
            dash: '@',
            report: '@',
            disname: '@',
            disdesc: '@',
            distot: '@'
        },
        templateUrl: 'views/dashboard/dashboard-direc.html',
        link: function (scope, element, attr) {
            scope.linkChk = scope.name;
            switch (scope.linkChk) {
                case 'Shipped This Week':
                    scope.url = 'erp/JobShipmentList/PostCpsVwShipmentCount';
                    scope.shipstatus = "Departure";
                    scope.period = "ThisWeek";
                    scope.basicfilter = "Open";
                    scope.linkName = "Shipments";
                    scope.linkDesc = "Shipped This Week";
                    break;
}
}])
15

Gulp-ng-annotateを使用している場合でも、これと同じ問題が発生しましたが、$ stateProviderでのみ発生し、ngDialogが解決します。

$stateProvider
  .state('orders', {
    url: '/orders',
    templateUrl: 'templates/orders.html',
    controller: 'OrdersController as vm',
    resolve: {
      authenticate: function (Auth) {
        return Auth.getAuthResolve();
      }
    }
  });

Resolveは次のように記述する必要があります。

    resolve: {
      authenticate: ['Auth', function (Auth) {
        return Auth.getAuthResolve();
      }]
    }

したがって、ng-annotateは配列をリゾルブに挿入するのではなく、コントローラー/サービス/ファクトリーコンストラクターにのみ挿入するように感じます。

2
Render

Angularは、ミニファイで常にうまく機能するとは限りません。

あなたが例としてこれを書くならば:

angular.controller("MyCtrl", function ($scope) {...});

次に、$scopeは縮小中に意味のないものに変更されます。

代わりにそれを次のように変更した場合:

angular.controller("MyCtrl", ["$scope", function (s) {...}]);

次に、文字列が"$scope"である限り、関数の最初の引数が何と呼ばれるか(ここではs)は関係ありません。

詳細については、ドキュメントの https://docs.angularjs.org/tutorial/step_05#a-note-on-minification を参照してください。

さらにヘルプが必要な場合は、エラーだけでなく、問題のコードを投稿する必要があります。

1
Webbies

angular-ui-router-titleの使用で問題が発生しました。変更後

$titleProvider.documentTitle(function($rootScope) {
    return $rootScope.$title + ' my title';
});

$titleProvider.documentTitle(['$rootScope', function($rootScope) {
    return $rootScope.$title + ' my title';
}]);

エラーは表示されなくなりました。

0
iwanuschka