javascript - Angularjs Typescript Controller 继承和依赖注入(inject)

标签 javascript angularjs inheritance typescript angularjs-controller

我正在尝试创建一组 Controller 类,这些类派生自具有许多依赖项的基类。每次我想创建派生类时,我都必须将基类构造函数依赖项复制到派生类构造函数中。这看起来特别丑陋和重复。见下文;

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'); }
     }
 }

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

有没有办法避免这些冗长的构造函数被重复?我曾想过在基本/父 Controller 中有一个函数,该函数从构造函数调用以注入(inject)所需的类型。这意味着依赖关系将被限制在基类中。

有人试过成功吗?

最佳答案

Angular 对 Controller 继承并不友好。它有利于构图。考虑将实用程序代码分解到 Angular 服务中:https://docs.angularjs.org/guide/services (它们是单例)或只是另一个 typescript 实用程序类。

如果你必须的话,你可以在基础中注入(inject)$injector:https://docs.angularjs.org/api/auto/service/$injector并使用它在基本构造函数内部加载您需要的内容。

关于javascript - Angularjs Typescript Controller 继承和依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25423877/

相关文章:

javascript - Firebase 设置错误

javascript - 如何在 ngInclude 内的元素上使用 $swipe.bind (ngTouch)?

c++基类包含派生类的实例

c# - C#继承与转换

javascript - 访问原型(prototype)函数中的私有(private)成员

javascript - 如何动态更新head标签中的CSS样式

javascript - JQuery 表单提交未调用成功

css - angular2-meteor styleUrl 不加载

javascript - 除了某些元素,Angular JS 禁用触摸滚动

java - 从通用父类(super class)型扩展?