2016-11-18 2 views
0

Ich habe einen Kind-Controller. Im übergeordneten Controller existieren $scope.dealers, aber nicht im untergeordneten Controller. Wie ist es möglich, dass $scope.dealers in der untergeordneten Steuerung vorhanden ist?Scope-Eigenschaft existiert in Kind-Controller, wenn es nicht sollte

Wenn Sie in watch Ausdruck suchen, sehen Sie die $scope.dealers existieren, während in der Closure der $scope nicht Händler haben.

enter image description here

Antwort

3

Es ist ein "Feature" von Winkeltive. Der untergeordnete Bereich erbt prototypisch vom übergeordneten Bereich.

Von https://docs.angularjs.org/guide/scope - Scope Hierarchien Abschnitt

Wenn Angular {{name}} auswertet, sieht es zunächst am Umfang mit dem angegebenen Elemente zugeordnet für den Namen Eigenschaft. Wenn keine solche Eigenschaft gefunden wird, wird der übergeordnete Bereich usw. durchsucht, bis der Root-Bereich erreicht ist. In JavaScript wird dieses Verhalten als prototypische Vererbung bezeichnet, und untergeordnete Bereiche erben prototypisch von ihren übergeordneten Elementen.

1

Ein Kind Controller wird den Umfang erben davon Eltern. Wenn Sie also $scope.dealers im übergeordneten Bereich definieren, wird es im untergeordneten Bereich als $scope.dealers vorhanden sein.

Darüber hinaus kann dies eine Menge Verwirrung verursachen, und als eine allgemeine Praxis versuche ich, Verschachtelung Controller so viel wie möglich zu vermeiden. Aus diesem Grund ist die Verwendung des Controller-Objekts selbst in vielen Fällen ein besserer Ansatz als die Verwendung des Bereichs.

app.controller('MyController', function($scope) { 
    var vm = this; 
    vm.dealers = []; // this won't clash with parent scope 
    //$scope.dealers = []; 
}); 

Und Sie können dies in der Vorlage noch Referenz:

<ul> 
    <li ng-repeat="dealer in vm.dealers"></li> 
</ul> 

prüfen die Winkelstyleguides aus: https://github.com/johnpapa/angular-styleguide

Verwandte Themen