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
}
我最近开始学习 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
}