Zmienna obiektowa działa ze względu na sposób działania prototypowego dziedziczenia JavaScript. ngInclude tworzy własny zakres podrzędny. Ten zakres podrzędny prototypowo dziedziczy z zakresu nadrzędnego.
W JavaScript, kiedy piszemy coś takiego $scope.x = 22
w zakresie dziecięcej, to tworzy właściwość x
na zakres dziecko dolarów i przypisuje jej wartość 22 - łańcuch prototypów nie jest konsultowany tutaj, więc zakres rodzic $ robi nie widzę, co się stało.
Kiedy piszemy coś w rodzaju $scope.someObj.prop1 = 22
w zakresie podrzędnym, jeśli JavaScript nie znajdzie obiektu someObj
na podrzędnym obiekcie $ scope, konsultuje się on z łańcuchem prototypów, a następny łańcuch $ w łańcuchu jest rodzica $ scope. Jeśli someObj
istnieje w nadrzędnym $ scope, wówczas macierzysty zakres $ zostanie zmodyfikowany.
Jak wspomniałem w komentarzu, tak następujące pytanie i odpowiedź wyjaśnia to wszystko bardziej szczegółowo (z dużą ilością zdjęć): What are the nuances of scope prototypal/prototypical inheritance in AngularJS?
proszę zobaczyć http://stackoverflow.com/questions/14049480/what-are-the-nuances-of-scope-prototypal-prototypical-inheritance -in-angularjs/14049482 # 14049482 –
Doskonała odpowiedź, Mark. – jogloran