2013-02-20 6 views
5

Ich habe diesen Thread gefunden, in dem die OPs original fiddle, wo eine ng-include d Scope seinen übergeordneten Bereich nicht ändert.AngularJS: Ändern des übergeordneten Bereichs in ng-include

Eine der Antworten schlägt vor:

Es ist hässlich und unberechenbar, so empfehle ich Ihnen, Ihre Daten in einer Objektvariablen zu wickeln: http://jsfiddle.net/e5rfP/3/

, die zu funktionieren scheint. Warum ist das?

+0

Bitte sehen http://stackoverflow.com/questions/14049480/what-are-the-nuances-of-scope-prototypal-prototypical-inheritance -in-angularjs/14049482 # 14049482 –

+0

Ausgezeichnete Antwort, Mark. – jogloran

Antwort

8

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?

0

Diese Richtlinie wird eine teilweise umfassen, ohne einen neuen Rahmen zu schaffen. Für ein Beispiel können Sie ein Formular im Teil erstellen und dieses Formular vom übergeordneten Controller steuern.

Hier ist eine link to the Repo, die ich für sie erstellt habe.

ich anhand meiner Antwort auf this S.O. answer viel Glück :-)

Verwandte Themen