Im Abschnitt "Komponenten erstellen" auf der Homepage von AngularJS gibt es dieses Beispiel:
controller: function($scope, $element) {
var panes = $scope.panes = [];
$scope.select = function(pane) {
angular.forEach(panes, function(pane) {
pane.selected = false;
});
pane.selected = true;
}
this.addPane = function(pane) {
if (panes.length == 0) $scope.select(pane);
panes.push(pane);
}
}
Beachten Sie, wie die Methode select
zu $scope
hinzugefügt wird, aber die Methode addPane
zu this
. Wenn ich es zu $scope.addPane
ändere, bricht der Code ab.
Die Dokumentation besagt, dass es tatsächlich einen Unterschied gibt, aber sie erwähnt nicht, was der Unterschied ist:
Frühere Versionen von Angular (vor 1.0 RC) erlaubten es Ihnen,
this
austauschbar mit der$scope
-Methode zu verwenden, aber das ist nicht mehr der Fall. Innerhalb von Methoden, die auf dem Scope definiert sind, sindthis
und$scope
austauschbar (Angular setztthis
auf$scope
), aber nicht anderswo innerhalb Ihres Controller-Konstruktors.
Wie funktionieren this
und $scope
in AngularJS-Controllern?
1 Stimmen
Ich finde das auch verwirrend. Wenn eine Ansicht einen Controller spezifiziert (z.B., ng-controller='...'), scheint der damit verbundene $scope ebenfalls mitzukommen, da die Ansicht auf $scope-Eigenschaften zugreifen kann. Aber wenn eine Direktive einen anderen Controller 'require't (und ihn dann in ihrer Linking-Funktion verwendet), kommt der damit verbundene $scope nicht mit?
0 Stimmen
Ist dieses verwirrende Zitat über "Vorherige Versionen..." mittlerweile entfernt worden? Dann wäre vielleicht ein Update angebracht?
0 Stimmen
Für Unittesting, wenn Sie 'this' anstelle von '$scope' verwenden, können Sie den Controller nicht mit einem gemockten Scope injizieren und somit keine Unittests durchführen. Ich glaube nicht, dass es eine gute Praxis ist, 'this' zu verwenden.