9

我使用 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;

}) };

这是我的应用程序中使用的代码。

4

4 回答 4

21

您必须在字符串数组中注入服务和控制器是有原因的。

如果要将范围注入控制器,则必须使用

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;
}
}])
于 2016-02-01T09:37:09.130 回答
2

我有同样的问题,即使我使用 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 并没有将数组注入到解析中,而只是注入到控制器/服务/工厂构造函数中。

于 2017-01-23T13:28:58.163 回答
2

Angular 并不总是适用于缩小。

如果你作为一个例子写这个:

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

如果您需要更多帮助,您必须发布有问题的代码,而不仅仅是错误。

于 2016-02-01T09:34:06.890 回答
0

我在使用angular-ui-router-title. 改变后

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

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

该错误不再出现。

于 2018-02-03T14:18:55.307 回答