无法在打字稿中扩展angularjs控制器

时间:2013-12-06 11:54:46

标签: javascript angularjs inheritance typescript angularjs-controller

我正在尝试使用Typescript扩展来继承angularjs控制器。但是一旦我扩展控制器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)

我可以使用控制器的plain angularjs继承,但是要调用child的父方法,我必须扩展子节点,因为否则typescript会给出错误,因为它无法在父节点中找到该方法。

1 个答案:

答案 0 :(得分:6)

您需要确保在 ParentCtrl之前定义 {em}。您可以通过正确排序脚本标记或参考文件或requirejs配置来实现,具体取决于您使用的方法。

或者将它们放在同一个文件中:

ChildCtrl

还有更多关于TypeScript modules here

的内容