将指令注入控制器最终会出现“[$ injector:unpr]未知提供程序”错误

时间:2015-07-21 16:39:03

标签: javascript angularjs

这是我的控制器:

(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 个答案:

答案 0 :(得分:1)

您可以通过在名称中添加后缀“Directive”来注入指令,因此在您的情况下,它有点不幸地被命名为eventTableDirectiveDirective

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

})

但是,为什么?!您想要将指令注入控制器吗?也许我缺乏远见,但我无法想象需要这样做的场景。指令是显式的View元素 - 它们在DOM中存在(和死亡)。控制器不应对视图做任何假设,包括HTML,样式,指令等......

我建议你阅读“Thinking in AngularJS” if I have a jQuery background?以了解我所说的内容。事实上,我希望你能读到它,因为否则我会给你一把枪,你会用脚射击自己。