繁体   English   中英

ES6中的AngularJS控制器继承

[英]AngularJS controller inheritance in ES6

我在AngularJS中有项目,并且我有baseController和从其继承的子控制器。

class BaseController {
    constructor($log, $state) {
        'ngInject';

        this.$log = $log;
        this.$state = $state;
    }
}

class ChildController extends BaseController {

    constructor(myService) {
        'ngInject';

        super();
        this.myService = myService;
    }
}

我的问题是:即使我不使用它,也需要将所有父依赖注入注入子控制器吗?

上面的示例显示了我想要实现的目标,但是没有用。 有人知道我是否可以在不将BaseController服务传递给super($scope, $state)调用的情况下实现它吗?

$ injector服务仅将依赖项注入实例化类的构造函数中。 它不会注入祖先类的构造函数中。

要使用祖先类的可注入对象构造控制器,请使用$ injector服务angular.extend

class BaseController {
    constructor($log, $window) {
        'ngInject';

        this.$log = $log;
        this.$window = $window;
    }
}

class ChildController  ̶e̶x̶t̶e̶n̶d̶s̶ ̶B̶a̶s̶e̶C̶o̶n̶t̶r̶o̶l̶l̶e̶r̶ {

    constructor(myService, $injector) {
        'ngInject';
        var base = $injector.instantiate(BaseController);
        angular.extend(this, base);
        ̶s̶u̶p̶e̶r̶(̶)̶;̶
        this.myService = myService;
    }
    $onInit() {
      this.$log.info("$onInit");
      this.$log.log(this.base);
    }
}

演示

 class BaseController { constructor($log, $window) { 'ngInject'; this.$log = $log; this.$window = $window; this.base = "Hello from BaseController"; } } class ChildController { constructor(myService, $injector) { 'ngInject'; var base = $injector.instantiate(BaseController); angular.extend(this, base); //super(); this.myService = myService; } $onInit() { this.$log.info("$onInit"); this.$log.log(this.base); } } angular.module("app",[]) .controller("child", ChildController) .value("myService", {}) 
 <script src="//unpkg.com/angular/angular.js"></script> <body ng-app="app" ng-controller="child as vm"> {{vm.base}} </body> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM