dev*_*n81 7 javascript inheritance angularjs 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'); }
}
}
Run Code Online (Sandbox Code Playgroud)
我已从构造函数参数中删除了类型定义,以便于阅读.
有没有办法避免这些冗长的构造函数被复制?我曾想过在base/Parent控制器中有一个函数,它从构造函数中调用以注入所需的类型.这意味着依赖关系将局限于基类.
有没有人成功尝试过这个?
Angular对控制器继承不友好.它有利于构图.考虑将实用程序代码分解为Angular服务:https://docs.angularjs.org/guide/services(它们是单例)或者只是另一个typescript实用程序类.
如果你必须你可以只注入$injector基地:https://docs.angularjs.org/api/auto/service/$injector并使用它来加载你在基础构造函数中需要的东西.