AngularJS&打字稿:如何将类/类型指定为指令的控制器?

时间:2014-03-16 23:18:02

标签: angularjs angularjs-directive typescript angularjs-controller

AngularJS指令使用以下命令指定控制器:

{
  controller: function ($scope){}
}

到目前为止,我还没有找到一种方法可以创建一个TypeScript类并将其分配给指令的控制器属性。

我想做的是像

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语法分配控制器的方式将控制器分配给指令。

2 个答案:

答案 0 :(得分:3)

我相信你可以在你的指令中做这样的事情:

...
controller: DirectiveController,
controllerAs: 'myCtrl'
...

然后angular应该使用其构造函数实例化您的类,您可以使用myCtrl

在模板中引用它

答案 1 :(得分: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