簡體   English   中英

Angularjs Typescript控制器繼承和依賴注入

[英]Angularjs Typescript Controller Inheritance and Dependency Injection

我正在嘗試創建一組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'); }
     }
 }

我已從構造函數參數中刪除了類型定義,以便於閱讀。

有沒有辦法避免這些冗長的構造函數被復制? 我曾想過在base / Parent控制器中有一個函數,它從構造函數中調用以注入所需的類型。 這意味着依賴關系將局限於基類。

有沒有人成功嘗試過這個?

Angular對控制器繼承不友好。 它有利於構圖。 考慮將實用程序代碼分解為Angular服務: https//docs.angularjs.org/guide/services (它們是單例)或者只是另一個typescript實用程序類。

如果你必須你可以在基礎中注入$injectorhttps//docs.angularjs.org/api/auto/service/$injector並使用它來加載你基礎構造函數中需要的東西

只需在基類中注入依賴項並公開存儲它們。 派生類將能夠訪問它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM