我正在尝试使用下面的模式在Typescript中创建一些指令。问题是'编译'返回的块。似乎没有被召唤。该类肯定会被创建,如果我单步执行,我可以看到编译函数在实例化时似乎被拾取,但编译中的代码永远不会运行。
我尝试将编译拆分为一个非常简单的调用(即compile():any => {console.log(' works')}和一些类似的变体),但是可以'得到任何代码来执行。
有什么想法吗?
export class myDirective implements ng.IDirective {
public restrict: string = 'AE';
constructor() {
console.log('my-directive ctor'); // this message IS logged
}
public compile = (element: JQuery, attrs: ng.IAttributes, transclude: any): ng.IDirectivePrePost => {
element.addClass('my-directive-class');
console.log('in compile'); // this message IS NOT logged
return {
pre: ($scope: any, element: JQuery, attrs: ng.IAttributes) => {
console.log('in compile pre'); // this message IS NOT logged
},
post: ($scope: any, element: JQuery, attrs: ng.IAttributes) => {
console.log('in compile post'); // this message IS NOT logged
}
};
}
public static factory(): ng.IDirectiveFactory {
var directive = () => {
return new myDirective();
};
return directive;
}
}
更新 我最初没有包含我用Angular注册指令的代码,它看起来像这样:
angular.module('myModule').directive('myDirective', myDirective.factory);
感谢来自@Gustav的提示,我意识到在指令中注册的工厂方法正在返回一个函数。我需要返回工厂函数的结果,所以简单地将parens添加到工厂方法的调用就可以了:
angular.module('myModule').directive('myDirective', myDirective.factory());