AngularJS TypeScript控制器继承和依赖注入

7

我正在尝试创建一组控制器类,它们都派生自一个具有许多依赖项的基类。每次我想要创建一个派生类时,我都必须将基类构造函数的依赖关系复制到派生类构造函数中。这似乎特别丑陋和重复。如下所示:

module MyModule
{    
     export class ParentCtrl
     {
         constructor($http, $provide, $scope,$compile,MyService,$parse,$timeout)
         {
             console.log('parent');
         }

         FunctionA(){...}
         ...
         FunctionZ(){...}
     }

     export class ChildCtrl extends ParentCtrl
     {
         constructor($http, $provide, $scope,$compile,MyService,$parse,$timeout)
         {
           super($http, $provide, $scope,$compile,MyService,$parse,$timeout);
           console.log('child');
         }
         FunctionA(){ console.log('Override A'); }
     }

     export class GrandChildCtrl extends ChildCtrl
     {
         constructor($http, $provide, $scope,$compile,MyService,$parse,$timeout)
         {
           super($http, $provide, $scope,$compile,MyService,$parse,$timeout);
           console.log('grandchild');
         }
         FunctionB(){ console.log('Override B'); }
     }
 }

为了方便阅读,我已经从构造函数参数中删除了类型定义。

有没有办法避免这些冗长的构造函数被复制?我曾考虑在基础/父控制器中添加一个函数,该函数从构造函数中调用以注入所需的类型。这将意味着依赖关系将限制在基类中。

之前有人成功尝试过吗?

2个回答

5

1
Basarat非常感谢您的反馈。$injector是首选方法,但我一直无法让$injector正常工作。到目前为止,我还不确定如何获取正确的注入器。此外,您是否预见到这种方法会出现任何问题? - devman81
你可以像 $http 一样获取 $injector。预见:如果它适合你,请使用它 :) - basarat
@devman81 我知道这是一个相当老的树,但是...我无法让它工作(直接注入到基本控制器中)。你能给个例子吗? - neoselcev
`export class ParentCtrl { protected $http; constructor($injector) { console.log('parent'); this.$http = $injector.get('$http'); } FunctionA(){...} } export class ChildCtrl extends ParentCtrl { constructor($injector) { super($injector); console.log('child'); } FunctionA(){ console.log('Override A'); } }` - devman81

-4
只需在基类中注入依赖项并公开存储它们。派生类将能够访问它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接