ES6中的AngularJS控制器继承

Ble*_*jwi 2 javascript oop angularjs ecmascript-6

我在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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

geo*_*awg 5

喷油器服务$仅依赖注入到实例化的类的构造函数。它不会注入祖先类的构造函数中。

要使用祖先类中的可注射对象构造控制器,请使用$ 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

演示

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);
    }
}
Run Code Online (Sandbox Code Playgroud)
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", {})
Run Code Online (Sandbox Code Playgroud)