Внедрение директивы в контроллер приводит к ошибке «[$ injector: unpr] Неизвестный поставщик»

0

Вот мой контроллер:

(function () {
    'use strict';

    angular
        .module('app.dashboard', [ 'app.services.dashboardService', 'app.dashboard.eventTableDirective'])
        .controller('DashboardController', DashboardController);

    DashboardController.$inject = ['dashboardService', '$log', 'eventTableDirective'];

    function DashboardController(dashboardService, $log) {
        //.....
    }
}());

и моя директива:

(function () {
    'use strict';

    angular
        .module('app.dashboard.eventTableDirective', [])
        .directive('eventTableDirective', eventTableDirective);

    function eventTableDirective() {
        var directive = {
            link: link,
            templateUrl: 'eventTable.directive.html',
            restrict: 'EA'
        };
        return directive;

        function link(scope, element, attrs) {
            /* */
        }
    }

}());

Хотя полностью такая же логика работает с dashboardService, она терпит неудачу с eventTableDirective и приводит к такой ошибке:

Ошибка: [$ injector: unpr] Неизвестный поставщик: eventTableDirectiveProvider <- eventTableDirective <- DashboardController

  • 1
    Очевидное первое место - вы включили его в ваш index.html?
  • 0
    Код, вероятно, не включен на странице.
Показать ещё 6 комментариев
Теги:

1 ответ

1
Лучший ответ

Вы можете ввести директиву, добавив суффикс "Директива" к имени, так что в вашем случае это было бы, к сожалению, названо eventTableDirectiveDirective:

.controller("FooCtrl", function(eventTableDirectiveDirective){

})

Но, ПОЧЕМУ?! хотите ли вы вообще ввести директиву в контроллер? Возможно, мне не хватает зрения, но я не могу представить себе сценарий, в котором это было бы необходимо. Директивы явно видят элементы - они живут (и умирают) в DOM. Контроллеры не должны делать никаких предположений о представлении, включая HTML, стили, директивы и т.д....

Я предлагаю вам прочитать "Мышление в AngularJS", если у меня есть фон jQuery? чтобы понять суть того, что я говорю. На самом деле, я надеюсь, вы прочтете это, потому что в противном случае я дал вам пистолет, с которым вы стреляли бы в ногу.

  • 0
    Теперь я чувствую себя очень глупо, мне интересно, почему я вообще пытался ввести директиву в контроллер, спасибо за ваш ответ.
  • 2
    @ Шота, я всегда рад возможности почувствовать себя глупо - так учатся

Ещё вопросы

Сообщество Overcoder
Наверх
Меню