Недавно я начал реорганизацию одного из проектов Angular, над которыми я работаю с TypeScript. Использование классов TypeScript для определения контроллеров очень удобно и хорошо работает с мини файлами JavaScript благодаря свойству static $inject Array<string>
. И вы получаете довольно чистый код без разделения Angular зависимостей от определения класса:
module app {
'use strict';
export class AppCtrl {
static $inject: Array < string > = ['$scope'];
constructor(private $scope) {
...
}
}
angular.module('myApp', [])
.controller('AppCtrl', AppCtrl);
}
Сейчас я ищу решение для обработки аналогичного случая для определения директивы. Я нашел хорошую практику для определения директив как функции:
module directives {
export function myDirective(toaster): ng.IDirective {
return {
restrict: 'A',
require: ['ngModel'],
templateUrl: 'myDirective.html',
replace: true,
link: (scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes, ctrls) =>
//use of $location service
...
}
};
}
angular.module('directives', [])
.directive('myDirective', ['toaster', myDirective]);
}
В этом случае я вынужден определять зависимости Angular в определении директивы, который может быть очень подвержен ошибкам, если определение и класс TypeScript находятся в разных файлах. Каким образом можно определить директиву с помощью механизма TypeScript и $inject
, я искал хороший способ реализовать интерфейс TypeScript IDirectiveFactory
, но я не был удовлетворен найденными вами решениями.