AngularJS 和 Typescript:如何将类/类型分配为指令的控制器?

Posted

技术标签:

【中文标题】AngularJS 和 Typescript:如何将类/类型分配为指令的控制器?【英文标题】:AngularJS & Typescript: How to assign a class/type as a directive's controller? 【发布时间】:2014-04-22 01:43:57 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

那么 Angular 应该用它的构造函数来实例化你的类,你可以在模板中用myCtrl引用它

【讨论】:

哇,这隐藏在文档中。如果你 google: "controllerAs" site:angularjs.org 你只会得到 $route 和 $compile 文档。然而,它在许多其他地方都有讨论,特别是在 *** 上。 是的,我在上面查找了文档,但只找到了一小段并没有真正解释它。必须搜索 *** 以获取它的示例。【参考方案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

【讨论】:

我忘记了以这种方式将控制器添加到范围的旧方法。我没有开始使用 AngularJS,直到他们已经有了用于控制器分配的 as 关键字。顺便说一句,很棒的视频 basarat。我得回去看看自从我上次看之后你有没有新的。没有它们,我永远不会使用 typescript/angular。您应该联系 Pluralsight 来整理完整的课程。 controllerAs 选项是更简洁(或至少更具声明性)的方式,因此我将其标记为答案。

以上是关于AngularJS 和 Typescript:如何将类/类型分配为指令的控制器?的主要内容,如果未能解决你的问题,请参考以下文章

Angularjs + Typescript,如何将 $routeParams 与 IRouteParamsService 一起使用

使用 TypeScript 和注入的 AngularJS 过滤器

如何使用 TypeScript 编写 AngularJS 的 Controller

如何使用具有构造函数参数的 TypeScript 类定义 AngularJS 工厂

使用 AngularJS 的 typescript 时如何在反引号中获取 html/css snipits

带有 ControllerAs 和 TypeScript 类的 AngularJs 指令