Ответ 1
Это один из подходов к поддержке Injection Dependency после того, как ваш код был уменьшен (если вы решили минимизировать).
Когда вы объявляете контроллер, функция принимает параметры:
function ($scope, notify)
Когда вы уменьшите код, ваша функция будет выглядеть так:
function (a, b)
Так как AngularJS использует имена параметров функции для вывода DI, ваш код будет прерываться, потому что AngularJS не знает о a
или b
.
Чтобы решить эту проблему, они предоставили дополнительные способы объявить контроллеры (или другие службы/фабрики/etc):
-
Для контроллеров используйте метод
$inject
- здесь вы передаете массив литералов, которые сопоставляются с параметрами вашей функции контроллера. Итак, если вы предоставляете['$scope', 'notify']
тогда значение первого параметра для вашей функции будет объектом области, связанным с этим контроллером, а вторым параметром будет служба уведомления.
-
При объявлении новых контроллеров, служб и т.д. вы можете использовать синтаксис литерала массива. Здесь вы делаете что-то вроде этого:
angular.module('myModule').controller('MyController', ['$scope', 'notify', function ($scope, notify) { ... }]);
Массив как параметр функции контроллера сопоставляет объекты DI с вашими параметрами функции.
Я предпочитаю вариант № 2 при объявлении контроллеров и т.д., поскольку его легче читать/понимать/перекрестно проверять, так как он все в одном месте.