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