【发布时间】:2015-04-16 06:42:25
【问题描述】:
我在打字稿中编写角度指令时遇到问题。 我想使用打字稿类编写我的指令。除控制器功能外,一切正常。
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;
}
不幸的是,打字稿不允许我在打字稿类中使用第二种方式。有什么我遗漏的吗,还是我完全从错误的角度来解决这个问题?
【问题讨论】:
-
我认为你可以这样做 this.reset => { this.test = 0};在测试脚本中。
标签: angularjs controller typescript directive