Zuerst eine wenig Klärung:
Für Dependency Injection, spielt es keine Rolle, ob Sie einen Controller mit einer globalen Funktion oder als Argument module.controller(...)
Methode deklarieren. Dependency Injector ist nur um die Funktion selbst besorgt. Also, was Sie fragen tatsächlich über die Gleichwertigkeit der beiden letztgenannten:
// First
function MyController($scope) {}
MyController.$inject = [ '$scope '];
// Second
function($scope) {}
Und weil, ob die Controller-Funktion anonym ist oder nicht auch nicht für den Injektor keine Rolle, kann die beiden oben genannten genausogut sein:
// First
function MyController($scope) {}
MyController.$inject = [ '$scope '];
// Second
function MyController($scope) {}
Jetzt ist es klar, dass der einzige Unterschied zwischen den beiden Controllern die Anwesenheit der in einem von ihnen $inject
Eigenschaft ist.
Und hier ist die eigentliche Antwort auf Ihre Frage:
Diese beiden Controller fast gleich sind. Beide erhalten das $scope
als Argument und funktionieren genauso. Wenn Sie sich jedoch entscheiden, Ihren Code später zu verkleinern, wird nur die Version mit dem Array $inject
richtig funktionieren. Wenn Sie weder das $inject
Array angeben noch den Inline-Annotations-Ansatz (http://docs.angularjs.org/guide/di#inlineannotation) verwenden, kann der Injektor nur herausfinden, an welchen Abhängigkeiten Sie interessiert waren, indem Sie die Namen der Funktionsargumente überprüfen Service-IDs). Die Minimierung würde diese Argumente jedoch nach dem Zufallsprinzip benennen, wodurch die Möglichkeit, Abhängigkeiten auf diese Weise zu erkennen, entfällt.
Wenn Sie also Ihren Code minimieren wollen, müssen Sie die Abhängigkeiten explizit mit $inject
Array oder Inline-Annotation angeben, sonst funktioniert jede Version genauso gut.
Danke, aber das scheint nicht mit '$ http' zu funktionieren ... gefragt hier: http://Stackoverflow.com/q/16664325 – user2283066