我正在尝试创建一组 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/