[英]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實用程序類。
如果你必須你可以在基礎中注入$injector
: https : //docs.angularjs.org/api/auto/service/$injector並使用它來加載你在基礎構造函數中需要的東西 。
只需在基類中注入依賴項並公開存儲它們。 派生類將能夠訪問它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.