我有一个问题在typescript中编写angular指令 . 我想用typescript类编写我的指令 . 除控制器功能外,一切正常 .
class myDirective implements ng.IDirective{
public priority :number = 999;
public require :String[] = ["ngModel","myDirective"];
public controller(){
var test = 1;
return {
reset : function(){
test = 0;
}
}
}
public link($scope: ng.IScope, elm: JQuery, attr: ng.IAttributes, ctrlArray: any){
var controller;
controller = ctrlArray[1];
controller.reset();
}
static factory(): ng.IDirectiveFactory{
var directive = () => new myDirective();
return directive;
}
}
export = myDirective;
但是当以角度运行时,当在链接函数内部调用controller.reset()时,我得到“未定义不是函数” . 当我检查控制器时,我只得到原型对象,没有定义复位功能 .
当我这样写我的指令时,它有效 .
function myDirective(): ng.IDirective{
return {
priority: 999,
require: ["ngModel","myDirective"],
controller: function(){
var test = 1;
this.reset = function(){
test = 0;
}
},
link: function($scope: ng.IScope, elm: JQuery, attr: ng.IAttributes, ctrlArray: any){
var controller;
controller = ctrlArray[1];
controller.reset();
}
}
}
export = myDirective;
区别在于控制器功能的编写方式 . 在我使用的typescript类中 .
return {
reset : function(){
test = 0;
}
}
在我使用的功能方式
this.reset = function(){
test = 0;
}
不幸的是,typescript不允许我在typescript类中使用第二种方式 . 有什么我想念的,或者我是从错误的角度完全接近这个?
1 回答
这是我们一直使用的指令设计:
这样,您的控制器是强类型的,并且指令定义对象是哑的(并且可能与角度2兼容) .