That is one approach to support Dependency Injection after your code is minified (if you choose to minify).
When you declare a controller, the function takes parameters:
function ($scope, notify)
When you minify the code, your function will look like this:
function (a, b)
Since AngularJS uses the function parameter names to infer DI, your code will break because AngularJS doesn’t know about a or b.
To solve this problem, they provided additional ways to declare controllers (or other services/factories/etc) for that matter:
-
For controllers, use the
$injectmethod – here you pass an array of literals that map to the parameters of your controller function. So, if you provide['$scope', 'notify']then the value of the first parameter to your function will be the a scope object associated with this controller and the second parameter will be the notify service.
-
When declaring new controllers, services, etc, you can use the array literal syntax. Here, you do something like this:
angular.module('myModule').controller('MyController', ['$scope', 'notify', function ($scope, notify) { ... }]);The array as a parameter to the controller function maps the DI objects to your function parameters.
I prefer Option #2 when declaring controllers etc as it is easier to read/understand/cross-check since it is all in the same place.