Я не понимаю использование $inject в контроллерах
Я совершенно запутался насчет инъекции в угловой. Я не знаю, где его использовать и почему. Он используется только с фабрикой как описано здесь?
myController.$inject = ['$scope','notify'];
здесь notify
- это название завода.
4 ответа:
это один из подходов к поддержке инъекции зависимостей после того, как ваш код будет минимизирован (если вы решите минимизировать).
при объявлении контроллера функция принимает параметры:
function ($scope, notify)
когда вы сократите код, ваша функция будет выглядеть так:
function (a, b)
поскольку AngularJS использует имена параметров функции для вывода DI, ваш код будет сломан, потому что AngularJS не знает о
a
илиb
.решить эту проблему, они предоставили дополнительные способы объявления контроллеров (или других служб / фабрик / и т. д.) По этому вопросу:
для контроллеров, используйте
$inject
метод - здесь вы передаете массив литералов, которые сопоставляются с параметрами функции контроллера. Так что, если вы предоставляете['$scope', 'notify']
тогда значение первого параметра для вашей функции будет объектом области видимости, связанным с этим контроллером, а второй параметр будет уведомлять услуга.
при объявлении новых контроллеров, сервисов и т. д., Вы можете использовать синтаксис литерала массива. Здесь, вы делаете что-то вроде этого:
angular.module('myModule').controller('MyController', ['$scope', 'notify', function ($scope, notify) { ... }]);
массив в качестве параметра функции контроллера сопоставляет объекты DI с параметрами вашей функции.
Я предпочитаю вариант #2 при объявлении контроллеров и т. д., поскольку его легче читать/понимать/перепроверять, поскольку все это находится в одном и том же месте.
В дополнение @Марк ответ, Важно отметить, что с помощью метода $inject в стиле:
MyController.$inject = ['$scope', 'notify'];
позволяет добавлять зависимости инъекций при построении поставщики которые являются единственными угловыми рецептами, которые не разрешить "дружественный" стиль аннотаций т. е.:
.controller('MyController', ['$scope', 'notify',...
зависимости, которые будут объявлены.
как вы должны использовать
$inject
- это:function ApplicationController($scope){ $scope.greet = "Foo is Not Great!5"; } ApplicationController.$inject = ['$scope','$ionic']; app.controller('ApplicationController', ApplicationController);
нам нужно это как защитить код от uglifying или минимизация.
function(firstName,lastName)
может статьfunction(n,m)
.так что для AngularJS он сломает код, потому что
$scope
может быть заменен на 's'. Это потому, что без$
подписать angularJS не сможет распознать код.