Angularjs (Typescript) 指令 link 函数未触发

Angularjs (Typescript) directive link function not firing

我最近开始学习 Typescript,但在创建指令时遇到了问题。执行工厂方法,但不执行 link 函数。不知道是结构问题还是别的什么。

这是我的指令:

namespace app {
'use strict';

class MyDirective implements ng.IDirective{
    restrict: string = 'A';

    constructor(private $compile: ng.ICompileService, private $templateRequest: ng.ITemplateRequestService, private logger: blocks.logger.Logger) {}

    static factory(): ng.IDirectiveFactory {
        var directive = ($compile: ng.ICompileService, $templateRequest: ng.ITemplateRequestService, logger: blocks.logger.Logger) =>new MyDirective($compile, $templateRequest, logger);
        directive.$inject = ['$compile', '$templateRequest', 'logger'];
        return directive;
    }

    link = (scope: ng.IScope, element: ng.IAugmentedJQuery) => {

        scope.$on('$stateChangeStart',() => {
            //more code ...
        });

        scope.$on('$viewContentLoaded', ():void => {
            //more code...
        });
    }
}

angular
    .module('app')
    .directive('myDirective', MyDirective.factory);
}

提前致谢!

我把指令添加到模块时忘记了 ()。

工作解决方案:

namespace app {
'use strict';

class MyDirective implements ng.IDirective{
    restrict: string = 'A';

    constructor(private $compile: ng.ICompileService, private $templateRequest: ng.ITemplateRequestService, private logger: blocks.logger.Logger) {}

    static factory(): ng.IDirectiveFactory {
        var directive = ($compile: ng.ICompileService, $templateRequest: ng.ITemplateRequestService, logger: blocks.logger.Logger) =>new MyDirective($compile, $templateRequest, logger);
        directive.$inject = ['$compile', '$templateRequest', 'logger'];
        return directive;
    }

    link = (scope: ng.IScope, element: ng.IAugmentedJQuery) => {

        scope.$on('$stateChangeStart',() => {
            //more code ...
        });

        scope.$on('$viewContentLoaded', ():void => {
            //more code...
        });
    }
}

angular
    .module('app')
    .directive('myDirective', MyDirective.factory()); //EDITED
}