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;
})};
これは私のアプリケーションで使用されているコードです。
文字列配列にサービスとコントローラーを挿入する必要があるのには理由があります。
コントローラにスコープを注入する場合は、を使用する必要があります
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;
}
}])
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は配列をリゾルブに挿入するのではなく、コントローラー/サービス/ファクトリーコンストラクターにのみ挿入するように感じます。
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 を参照してください。
さらにヘルプが必要な場合は、エラーだけでなく、問題のコードを投稿する必要があります。
angular-ui-router-title
の使用で問題が発生しました。変更後
$titleProvider.documentTitle(function($rootScope) {
return $rootScope.$title + ' my title';
});
に
$titleProvider.documentTitle(['$rootScope', function($rootScope) {
return $rootScope.$title + ' my title';
}]);
エラーは表示されなくなりました。