我尝试将一些控制器之间的一些常用功能分解为父控制器。我想使用某种继承来做这件事,而不是某种服务。
使用$injector.invoke
函数的所有示例都依赖于父范围内的父构造函数。
像这样:http://plnkr.co/edit/kva82QyytKQfOafGiVxL?p=preview。
由于我将所有控制器都放在不同的文件中,所以我喜欢这样做:
父控制器有自己的模块:
angular.module('app.parent').controller('ParentCtrl', function() {
this.someMethodProvidedbyParent = ....
});
子控制器使用ParentCtrl
扩展$injector.invoke
。如何获得ParentCtrl
?
angular.module('app.parent.child').controller('ChildCtrl', function($injector) {
// Somehow need to get ParentCtrl from the angular module 'app.parent'
$injector.invoke(ParentCtrl, this, {});
});
我假设我可以将ParentCtrl放在全局范围内的某个对象中,但我更倾向于使用角度模块系统。
答案 0 :(得分:4)
好的,我设法通过实例化父控制器,然后使用angular.extend
这样做:
app.controller('ChildCtrl', function($controller) {
angular.extend(this, $controller('ParentCtrl'));
// Overriding methods here (after extending `this`)
});
来自父级的属性将复制到this
。