angular get controller constructor

时间:2015-04-10 10:04:05

标签: javascript angularjs

我尝试将一些控制器之间的一些常用功能分解为父控制器。我想使用某种继承来做这件事,而不是某种服务。 使用$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放在全局范围内的某个对象中,但我更倾向于使用角度模块系统。

1 个答案:

答案 0 :(得分:4)

好的,我设法通过实例化父控制器,然后使用angular.extend这样做:

app.controller('ChildCtrl', function($controller) {
  angular.extend(this, $controller('ParentCtrl'));

  // Overriding methods here (after extending `this`)
});

来自父级的属性将复制到this