Как вводить $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()
.
Здесь ссылка для ответа в другом потоке и прямая ссылка