Вот мой контроллер:
(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
Вы можете ввести директиву, добавив суффикс "Директива" к имени, так что в вашем случае это было бы, к сожалению, названо eventTableDirectiveDirective
:
.controller("FooCtrl", function(eventTableDirectiveDirective){
})
Но, ПОЧЕМУ?! хотите ли вы вообще ввести директиву в контроллер? Возможно, мне не хватает зрения, но я не могу представить себе сценарий, в котором это было бы необходимо. Директивы явно видят элементы - они живут (и умирают) в DOM. Контроллеры не должны делать никаких предположений о представлении, включая HTML, стили, директивы и т.д....
Я предлагаю вам прочитать "Мышление в AngularJS", если у меня есть фон jQuery? чтобы понять суть того, что я говорю. На самом деле, я надеюсь, вы прочтете это, потому что в противном случае я дал вам пистолет, с которым вы стреляли бы в ногу.