Verständnis dependency injection in AngularJS Controller
Nur lernen, dependency injection, und ich glaube, ich fange an, es zu verstehen.
Bitte sagen Sie mir, wenn ich auf der rechten Spur...
E. g.: Sind diese beiden gleichwertig?
/* injection method */
function <controller_name>($scope) {}
<controller_name>.$inject = ['$scope'];
/* other method */
var app = angular.module('myApp');
app.controller(<controller_name>, function($scope) {});
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst eine kleine Klarstellung:
Für dependency injection, ist es egal, ob Sie deklarieren Sie einen controller über eine Globale Funktion oder als argument
module.controller(...)
Methode. Dependency injector ist nur besorgt um die Funktion selbst. Also, was du eigentlich Fragen, ist die Gleichwertigkeit dieser beiden:Und da, ob die controller-Funktion ist anonym oder nicht spielt auch keine Rolle für den Injektor, der die beiden oben genannten kann genau so gut sein:
Jetzt ist es klar, dass der einzige Unterschied zwischen den beiden Controllern ist die Anwesenheit der
$inject
Eigenschaft in einer von Ihnen.Und hier ist die eigentliche Antwort auf deine Frage:
Diese beiden Controller sind fast die gleichen. Beide erhalten die
$scope
als argument und Funktion die gleiche. Allerdings, wenn Sie sich entscheiden, zu minifizieren Ihren code später, wird nur die version mit$inject
array an wird es richtig funktioniert. Dies ist, weil, wenn Sie nicht angeben, die$inject
array und verwenden Sie die inline-annotation Ansatz (http://docs.angularjs.org/guide/di#inlineannotation), der einzige Weg für den Injektor, um herauszufinden, welche Abhängigkeiten Sie waren daran interessiert ist, überprüfen Sie den Namen der Funktion Argumente (Behandlung von Ihnen als service-IDs). Aber minifizierung name würde diese Argumente zufällig womit die chance, zu erkennen, Abhängigkeiten auf diese Weise.Also, wenn Sie gehen zu minifizieren Ihrem code, müssen Sie die Abhängigkeiten explizit über
$inject
array oder inline-annotation sonst jede version funktioniert genauso gut.Wenn du gehst zu verwenden, die
module.controller
Methode, die gleich zu Ihrem ersten Beispiel wäre:Beachten Sie, dass dieser Weg, den wir vorbei sind die
$inject
string zusammen mit der Funktion, so dass, wenn es später wird minimiert, es wird immer noch funktionieren.$http
... fragte es hier: stackoverflow.com/q/16664325