Контроллер на основе классов 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();
}
}