Невозможно расширить контроллер angularjs в typescript
Я пытаюсь наследовать контроллер angularjs, используя расширения Typescript. Но как только я расширяю контроллер angularjs выдает эту ошибку:
Ошибка: аргумент 'GenericLookupCtrl' не является функцией, получил неопределенное значение
Вот мой упрощенный код родительских и дочерних классов:
Родитель первый:
module Controllers.SolMan
{
export class ParentCtrl
{
constructor(
seUIConfigsCacheService: Services.CrossCutting.UIConfigsCacheService,
seHttpService: Services.CrossCutting.HttpService,
$scope: Interfaces.IParentScope,
genericServices: Services.CrossCutting.GenericService,
$compile)
{
console.log('parent');
}
}
}
Ребенок:
module Controllers.SolMan {
export class ChildCtrl extends ParentCtrl {
constructor(
seUIQueryConfigsCacheService: Services.CrossCutting.UIConfigsCacheService,
seHttpService: Services.CrossCutting.HttpService,
$scope: Interfaces.IChildScope,
genericServices: Services.CrossCutting.GenericService,
$compile,
$injector) {
super(seUIConfigsCacheService, seHttpService, $scope, genericServices, $compile);
console.log('Child');
}
}
}
Вот как регистрируются контроллеры:
.controller('ParentCtrl', Controllers.ParentCtrl)
.controller('ChildCtrl', Controllers.ChildCtrl)
Я могу использовать простое AngularJS наследование контроллеров но чтобы вызвать родительские методы из дочернего я должен расширить дочерний, потому что в противном случае typescript выдает ошибку, что он не может найти метод в Родительском.
1 ответ:
Вы должны убедиться, что
ParentCtrl
определен Перед тем, какChildCtrl
. Вы можете сделать это, правильно упорядочив теги скрипта, файл ссылок или конфигурацию requirejs в зависимости от используемого метода.Альтернативно поместите их в тот же файл:
module Controllers.SolMan { export class ParentCtrl { constructor( seUIConfigsCacheService: Services.CrossCutting.UIConfigsCacheService, seHttpService: Services.CrossCutting.HttpService, $scope: Interfaces.IParentScope, genericServices: Services.CrossCutting.GenericService, $compile) { console.log('parent'); } } } module Controllers.SolMan { export class ChildCtrl extends ParentCtrl { constructor( seUIQueryConfigsCacheService: Services.CrossCutting.UIConfigsCacheService, seHttpService: Services.CrossCutting.HttpService, $scope: Interfaces.IChildScope, genericServices: Services.CrossCutting.GenericService, $compile, $injector) { super(seUIConfigsCacheService, seHttpService, $scope, genericServices, $compile); console.log('Child'); } } }
Здесь больше о модулях TypeScript