У меня проблема относительно механизма впрыска угловой зависимости. Я написал директиву в отдельном модуле, который делает некоторые аккуратные вещи на datatable. Я использую машинопись и моя директива выглядит следующим образом:Неисправность впрыска AngularJS в модуле
export class MdListControls implements angular.IDirective {
public templateUrl = "/app/templates/mdListControls.html";
public static instance(): any {
return new MdListControls();
};
public restrict = 'E';
public transclude = true;
public replace = true;
public scope = {
grid: '=',
};
public controller = "mdListControlsController"
public controllerAs = "vm";
public link = function (scope: angular.IScope, element: angular.IAugmentedJQuery, attrs: angular.IAttributes) {
};
}
Мой контроллер выглядит примерно так:
export class MdListControlsController {
static $inject = ['scope']
constructor($scope: angular.IScope){
//Setup the constructor
}
//Here goes the controller Logic
}
Я регистрируя директиву и контроллер на новый модуль следующим образом:
angular.module("base.directives.mdListControls", [])
.controller("mdListControlsController", MdListControlsController)
.directive("mdListControls", function() { return MdListControls.instance() });
Однако, когда я запустить приложение, я получаю следующее сообщение об ошибке, как только будет загружена директива:
Argument 'mdListControlsController;' is not a function, got undefined
Это не совсем похоже на проблему с инъекцией зависимостей. Но когда я зарегистрировать контроллер на само приложение (которое получает вводил «base.directives.mdListControls» Module), как так
app.controller("mdListControlsController", MdListControlsController);
все работает отлично, и контроллер получает введен правильно в директиве.
Кто-нибудь знает, что я здесь делаю неправильно? Спасибо за помощь!
Я не знаю TypeScript, но проблема заключается в порядке выполнения JS. MdListControlsController недоступен, когда ваш контроллер регистрируется как angular.module («base.directives.mdListControls», []) .controller («mdListControlsController», MdListControlsController) – Prashant
Я тоже не знаю TypeScript. Что произойдет, если в объявлении вашего контроллера вы выполните .controller («mdListControlsController», function() {return MdListControlsController})? –
Может быть, глупый вопрос. Но вы, похоже, экспортируете MdListControlsController. Вы также импортируете его в верхней части файла вашего директивного модуля? –