AngularJS 和 TypeScript:如何将一个类/类型分配为指令的控制器?
AngularJS 指令使用以下方式指定控制器:
{
controller: function ($scope){}
}
截至目前,我还没有找到一种方法可以创建一个 TypeScript 类并将其分配给指令的 controller 属性。
我想做的事情类似于
interface IDirectiveController{
myProperty:string;
}
class DirectiveController implements IDirectiveController{
static $injector = [$scope];
constructor ($scope:ng.IScope){
this.myProperty = 'default';
}
public myProperty:string;
}
var directive:ng.IDirective =
{
controller:DirectiveController;
}
return directive;
更好的是,如果可以使用工厂函数来创建并返回控制器的新实例,那将会很好,这类似于指令本身是如何被实例化的。
在我的指令模板中,我也希望直接绑定到控制器,而不是必须将类的属性分配给 $scope。
另一种表达方式可能是说,我希望能够以类似于在模板中使用 myController as ContollerType 语法分配控制器的方式,将控制器分配给指令。
答案#1
我相信你可以在你的指令中这样做:
...
controller: DirectiveController,
controllerAs: 'myCtrl'
...
然后 Angular 应该使用它的构造函数实例化你的类,你可以在模板中通过 myCtrl 来引用它
答案#2
简单地做你在没有指令的情况下会做的事情,即:
class DirectiveController{
static $inject = ['$scope']; // fixed a few typos here
constructor ($scope){
$scope.vm = this; // this is the pattern I recommend for all controllers
this.myProperty = 'default';
}
public myProperty:string;
}
要了解更多关于此模式的信息,请参见:http://www.youtube.com/watch?v=WdtVn_8K17E&hd=1
