2016-06-06 4 views
1

У меня есть контроллер Angular 1.4 с методом, который зависит от службы ресурсов. Я аннотированный конструктор этого класса с ng-annotate, но до сих пор, Угловое проклинает, что услуга не может быть найден в методе:Контроллер класса ECMA6 с babel и ng-annotate/ngИнъективные результаты в ReferenceError

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-класса?

ответ

2

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(); 
    } 
} 
+0

Ах, когда-либо так просто. Я спал. Спасибо! –

+0

Есть ли способ сделать это, не подвергая угловую службу моему контроллеру? Я просто не хочу показывать вызовы службы непосредственно в представлении. – frosty

 Смежные вопросы

  • Нет связанных вопросов^_^