quel puntino è molto importante quando si tratta con la complessità di portata eredità.
Il egghead.io video "The Dot" ha davvero una buona visione d'insieme, come fa questa domanda molto popolare di stack overflow: What are the nuances of scope prototypal/prototypical inheritance in AngularJS?
cercherò di riassumere qui:
Angular.js usa portata ereditando per consentire un ambito bambino (come un controller figlio) per vedere le proprietà dell'ambito principale. Quindi, diciamo che si ha una configurazione simile:
<div ng-controller="ParentCtrl">
<input type="text" ng-model="foo"/>
<div ng-controller="ChildCtrl">
<input type="text" ng-model="foo"/>
</div>
</div>
(Play along on a JSFiddle)
In un primo momento, se hai iniziato l'applicazione, e digitato nell'ingresso genitore, il bambino sarebbe aggiornare per riflettere esso.
Tuttavia, se si modifica l'ambito figlio, la connessione al genitore è ora interrotta e i due non si sincronizzano più. D'altra parte, se si utilizza ng-model="baz.bar"
, il collegamento rimarrà.
La ragione per cui questo accade è perché l'ambito figlio utilizza l'ereditarietà prototipica per cercare il valore, quindi finché non viene mai impostato sul figlio, verrà rinviato all'ambito genitore. Ma, una volta impostato, non cerca più il genitore.
Quando si utilizza un oggetto (baz
), non viene impostato nulla sull'ambito secondario e l'ereditarietà rimane.
Per maggiori dettagli in profondità, controlla la StackOverflow answer
Personalmente ritengo che questo sia più un problema di filosofia sulla modellazione di un sistema. Alcune persone usano '$ scope' come modello di vista, mentre altre no. È una questione di preferenza. – yuxhuang
Vedere http: // stackoverflow.it/questions/15623698/direction-isolate-scope-with-ng-repeat-scope/15645354 # 15645354 – yanhan