4

Я использовал 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; 

}) };

Это код, используемый в моем приложении.

+1

Возможный дубликат [Уклонение от углового с помощью grunt uglify, приводящее к ошибке js] (http://stackoverflow.com/questions/22866183/angularjs-minification-using-grunt-uglify-resulting-in-js-error) – Webbies

ответ

11

Существует причина, по которой вам нужно вводить службы и контроллер в массив строк.

, если вы хотите, чтобы придать объем к контроллеру, вы должны использовать

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

минификация изменит имена переменных, и если вы не используете этот массив строк при нагнетании услуг или контроллеров, это будет например

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

Таким образом, угловой не сможет понять, что означает «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; 
} 
}]) 
+0

i имеет пользовательскую директиву в моем файле-контроллере. После минимизации он выдает ошибку, например [$ injector: unpr] Неизвестный поставщик: eProvider <- e <- e директива .. Кроме того, все работает нормально. –

+0

Обновлен ответ, проверьте и посмотрите, работает ли он. –

+1

спасибо Рагу. Я сделал для контроллера, но я пропустил директивы. Он работает сейчас. –

1

Угловой не всегда хорошо работает с минимизацией.

Если в качестве примера написать так:

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

Тогда $scope будет изменено на что-то бессмысленное во минификация.

Если один вместо изменения, что:

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

Тогда не имеет значения, что первый аргумент в функции называется (здесь s), пока строка "$scope".

Для получения дополнительной информации нажмите здесь: https://docs.angularjs.org/tutorial/step_05#a-note-on-minification.

Если вам нужна дополнительная помощь, вы должны опубликовать код, о котором идет речь, а не только об ошибке.

0

У меня была такая же проблема, даже когда я использую Глоток-нг-аннотировать, но это происходит только происходит за $ 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(); 
     }] 
    } 

Так он чувствует, что нг-Аннотировать не вводить массив в решает, но только контроллер/обслуживания/заводских конструкторов.

+0

Вы должны использовать ng-anotate везде, где есть инъекция даже внутри решения (перед каждой функцией) –

0

У меня возникла проблема с использованием angular-ui-router-title.После изменения

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

в

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

ошибка не появляется больше.