Eine Objektvariable funktioniert aufgrund der JavaScript-Prototypvererbung. ngInclude erstellt einen eigenen untergeordneten Bereich. Dieser unterordnete Bereich erbt prototypisch vom übergeordneten Bereich. Wenn wir in JavaScript schreiben, wie $scope.x = 22
in einem untergeordneten Bereich, erstellt dies eine x
-Eigenschaft für den untergeordneten $ scope und weist ihm den Wert 22 zu - die Prototypkette wird hier nicht konsultiert, also der übergeordnete $ scope nicht sehen, was passiert ist.
Wenn wir etwas wie $scope.someObj.prop1 = 22
für den untergeordneten Bereich schreiben, wenn JavaScript das Objekt someObj
für den untergeordneten $ scope nicht findet, konsultiert es die Prototypkette und der nächste $ scope in der Kette ist der übergeordnete $ scope. Wenn someObj
für den übergeordneten $ scope vorhanden ist, wird der übergeordnete $ scope geändert.
Wie ich in einem Kommentar erwähnt, erklärt die folgenden SO Frage und Antwort das alles in viel mehr ins Detail (mit vielen Bildern): What are the nuances of scope prototypal/prototypical inheritance in AngularJS?
Bitte sehen http://stackoverflow.com/questions/14049480/what-are-the-nuances-of-scope-prototypal-prototypical-inheritance -in-angularjs/14049482 # 14049482 –
Ausgezeichnete Antwort, Mark. – jogloran