Как вводить $w Angular класс w/ES6

Используя Angular 1.4 с ES6/7 и Babel, я могу успешно вводить параметры в класс с именем Controller с этим кодом после блока класса:

class Controller {
    constructor($scope, $state, $window) {...}
    ...
}
Controller.$inject = ["$scope", "$state", "$window"]

Однако было бы проще видеть параметры впрыска прямо над конструктором. Я видел, как другие люди использовали static $injection, но я получаю сообщение об ошибке. Вот что я пытаюсь:

class Controller {
    static $inject = ["$scope", "$state", "$window"]
    constructor($scope, $state, $window) {...}
    ...
}

Почему это вызывает эту ошибку? Кажется, это работает для других людей.

Unexpected token (2:11)
  1 | class Controller {
  2 |     static $inject = ["$scope", "$state", "$window"]
    |  
              ^

Ответ 1

Это экспериментальный предложенный синтаксис. В Babel вам нужно включить es7.classProperties. Pass

optional: ['es7.classProperties']

для babel. Точный метод зависит от того, как вы переписываете.

Если вы хотите сделать стандартный ES6, вы также можете сделать

static get $inject(){ return ["$scope", "$state", "$window"]; }

Ответ 2

Другим подходом будет использование $injector.annotate(fn), который Angular использует для инъекции зависимостей и который позволяет вам получать аргументы функции, которую вы передаете ей. Вы можете использовать его, чтобы получить имена всех параметров constructor() и получить их с помощью $injector.get().

Здесь ссылка для ответа в другом потоке и прямая ссылка