Невозможно расширить контроллер 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 4

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