2016-04-20 2 views
0

Ich bin dabei, Angular.js zu lernen und zu versuchen, die Syntax zum Übergeben von Variablen an Funktionen beim Konstruieren von Dingen wie einem Controller oder einer Direktive zu verstehen. Ich habe die folgende Syntax beim Aufbau eines Controllers gesehen.Angular JS-Variable aufgeführt vor der Übergabe als Funktionsparameter beim Erstellen von Controllern, Diensten usw.

app.controller('MainController', ['$scope', function($scope) { 
    $scope.somestuff = "some stuff"; 
}]); 

Wenn die Variable $scope platziert wird, bevor sie in der Funktion verwendet wird.

Ich habe auch diese Syntax wo $scope nur in der Funktion verwendet wird, ohne es vor der Funktion zu platzieren und platzieren Sie beide in eckigen Klammern.

Kann jemand den Unterschied hier erklären und wenn es eine bevorzugte Methode gibt? Die Codecademy verwendet die erste Methode, während W3Schools letztere verwendet.

Antwort

0

Die Syntax heißt Dependency Annotation. Es gibt drei verschiedene Methoden, um die Abhängigkeitsinjektion durchzuführen.

Ihre erste ist die Inline-Array-Annotation. Sie definieren die Abhängigkeiten als eine Zeichenfolge und Winkel injiziert sie in der gleichen Reihenfolge an das letzte Element des Arrays, Ihre Funktion.

Ihre zweite Syntax ist die implizite Abhängigkeit Injektion. Angular versucht, die richtige Abhängigkeit durch die Funktionsargumentnamen zu erhalten.

Die letzte Möglichkeit, Ihre Abhängigkeiten zu injizieren, ist die $ inject Eigenschaft.

app.controller('myCtrl', MyCtrl); 
MyCtrl.$inject = ['$scope']; 
function MyCtrl($scope) { 
... // your ctrl code 
} 

$ scope wird explizit mit der function -Eigenschaft eingefügt.

Es wird empfohlen, die Inline-Array-Annotation oder die $ inject-Eigenschaft zu verwenden, da beide Möglichkeiten nicht davon betroffen sind, Ihren Code zu minimieren. Die implizite Abhängigkeitsinjektion sollte nur für kleine Projekte oder Code-Snippets verwendet werden.

+0

Super! Danke für Ihre Erklärung. macht jetzt Sinn für mich. Ich würde mich freuen, wenn diese Online-Tutorials solche Sachen eigentlich erklären würden, anstatt einfach nur zu überspielen. – SlowBlurry

+0

Die Dokumentation, wenn eckig ist ziemlich gut und ja die meisten Tutorials sind nur auf das Hauptproblem konzentriert. – k4l4m

0

Sie haben Dependency Injection konfrontiert.

In Ihren beiden Beispielen ist der Unterschied nur in der Anmerkung. Das erste Beispiel verwendet Inline-Array-Annotation (und ist die bevorzugte Methode zum Annotieren von Anwendungskomponenten) und das zweite Beispiel verwendet implizite Annotation. Sie können mehr über sie in dem Link lesen, den ich oben verlassen habe.

Hoffnung, die geholfen hat.

+0

Danke! Das half – SlowBlurry