AngularJS & Typescript: Как назначить класс / тип в качестве контроллера директивы?
Директивы 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 ответа
Я полагаю, что вы могли бы сделать что-то подобное в вашей директиве:
...
controller: DirectiveController,
controllerAs: 'myCtrl'
...
Тогда angular должен создать экземпляр вашего класса с его конструктором, и вы можете обратиться к нему в шаблоне с помощью myCtrl
Просто сделайте то, что вы сделали бы в отсутствие директивы, то есть:
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.