Контроллер на основе классов ECMA6 с babel и ng-annotate/ngInject приводит к ReferenceError

У меня есть контроллер Angular 1.4 с методом, который зависит от службы ресурсов. Я аннотировал конструктор этого класса ng-annotateНо все же, Angular curses, что сервис не может быть найден в методе:

var MyResourceFactory = require("myResource.service");

class MyController {
    // @ngInject
    constructor($location, $stateParams, $state, MyResource) {
        ... // some initialization code
    }

    myMethod(data) {
        var resource = new MyResource();
        resource.data = data;
        resource.save();
    }
}

module.exports = angular.module("MyModule", [])
    .factory('MyResource', MyResourceFactory)
    .controller('MyController', MyController)
    .config(routes);

Но на самой первой линии myMethod (var resource = new MyResource()) выполнение не выполняется:

ReferenceError: MyResource is undefined
    at MyController.myMethod (myModule.module.js:214)
    ...

Используемые технологии:

  • Угловой 1.4
  • Webpack
  • галдеж
  • нг-аннотировать

Как применить ngInject к методу класса ECMA6?

1 ответ

Решение

MyResource переменная локальная для метода конструктора, и она недоступна снаружи. Обычный подход в таких случаях заключается в том, чтобы сделать его публичной собственностью:

class MyController {
    // @ngInject
    constructor($location, $stateParams, $state, MyResource) {
        this.MyResource = MyResource;
        // ... some initialization code
    }

    myMethod(data) {
        var resource = new this.MyResource();
        resource.data = data;
        resource.save();
    }
}
Другие вопросы по тегам