网站搜索

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