Dieser kleine Punkt ist sehr wichtig, wenn es um die Komplexität der Bereichsvererbung geht.
Das egghead.io-Video "The Dot" hat einen wirklich guten Überblick, ebenso wie diese sehr beliebte Frage zum Stapelüberlauf: Was sind die Nuancen der prototypischen / prototypischen Vererbung des Bereichs in AngularJS?
Ich werde versuchen, es hier zusammenzufassen:
Angular.js verwendet die Bereichserbung, damit ein untergeordneter Bereich (z. B. ein untergeordneter Controller) die Eigenschaften des übergeordneten Bereichs anzeigen kann. Nehmen wir also an, Sie hatten ein Setup wie:
<div ng-controller="ParentCtrl">
<input type="text" ng-model="foo"/>
<div ng-controller="ChildCtrl">
<input type="text" ng-model="foo"/>
</div>
</div>
( Spielen Sie auf einer JSFiddle mit )
Wenn Sie die App gestartet und in die übergeordnete Eingabe eingegeben haben, wird das untergeordnete Element zunächst aktualisiert, um es wiederzugeben.
Wenn Sie jedoch den untergeordneten Bereich bearbeiten, wird die Verbindung zum übergeordneten Bereich jetzt unterbrochen und die beiden werden nicht mehr synchronisiert. Wenn Sie dagegen verwenden ng-model="baz.bar"
, bleibt der Link erhalten.
Der Grund dafür ist, dass der untergeordnete Bereich eine prototypische Vererbung verwendet, um den Wert nachzuschlagen. Solange er nicht für das untergeordnete Element festgelegt wird, wird er auf den übergeordneten Bereich verschoben. Sobald es eingestellt ist, sucht es nicht mehr nach dem Elternteil.
Wenn Sie baz
stattdessen ein Objekt ( ) verwenden, wird für den untergeordneten Bereich nie etwas festgelegt, und die Vererbung bleibt erhalten.
Weitere Informationen finden Sie in der StackOverflow-Antwort
$scope
als Ansichtsmodell, andere nicht. Es ist eine Frage der Präferenz.