在視頻AngularJS MTV Meetup: Best Practices (2012/12/11),MISKO解釋說,「..如果您使用NG-模型必須有某處的一個點。如果你沒有一個點,你就錯了。」爲什麼AngularJS文檔不在模型指令中使用點?
然而, Angular.JS website中的第一個例子(The Basics)似乎與它相矛盾。是什麼賦予了?自MTV大會以來,Angular.JS是否發生了變化,現在它更加寬容於ng-model?
在視頻AngularJS MTV Meetup: Best Practices (2012/12/11),MISKO解釋說,「..如果您使用NG-模型必須有某處的一個點。如果你沒有一個點,你就錯了。」爲什麼AngularJS文檔不在模型指令中使用點?
然而, Angular.JS website中的第一個例子(The Basics)似乎與它相矛盾。是什麼賦予了?自MTV大會以來,Angular.JS是否發生了變化,現在它更加寬容於ng-model?
與範圍繼承的複雜問題時的小點是非常重要的。
的egghead.io video "The Dot"有一個很好的概述,做到這一點非常流行的堆棧溢出問題:What are the nuances of scope prototypal/prototypical inheritance in AngularJS?
我將在這裏總結一下:
Angular.js使用範圍繼承允許子作用域(如子控制器)查看父範圍的屬性。所以,讓我們說你有像設置:
<div ng-controller="ParentCtrl">
<input type="text" ng-model="foo"/>
<div ng-controller="ChildCtrl">
<input type="text" ng-model="foo"/>
</div>
</div>
首先,如果你開始的應用程序,並輸入到父輸入時,孩子會更新,以反映它。
但是,如果編輯子範圍,父的連接,現在壞了,兩個不再同步跟進。另一方面,如果您使用ng-model="baz.bar"
,則鏈接將保留。
出現這種情況的原因是因爲孩子Scope使用原型繼承來查找值,所以只要它永遠不會對孩子設置,那麼它會推遲到父範圍。但是,一旦設置,它不再查找父母。
當你使用一個對象(baz
)代替,從來都沒有被設置在兒童範圍,產業依然存在。
對於更深入的細節,檢查出StackOverflow answer
該egghead視頻是值得它的黃金重量。最好的描述這個問題,永遠。 –
什麼是簡潔的總結 - 太棒了。 – drjimmie1976
我是唯一一個認爲添加任意容器變量令人難以置信的人嗎?我明白爲什麼這是一個「最佳實踐」,但看到包含實際重要內容的隨機變量是非常難看的。我實際上傾向於避免這個「最佳實踐」。我不經常遇到任何問題,因爲我留意後果。在一年的密集角度發展過程中,我一直沒有被這種困擾。 – Spencer
當你prototypically繼承的情況下,從另一個範圍,例如點會被要求NG-重複了這prototypically從母體繼承的範圍每行項目創建一個新的範圍。在基本的例子中,沒有原型繼承,因爲只有一個範圍,但是如果你有一些子範圍,那麼你將開始面對這個問題。下面的鏈接將使一切變得清晰。
https://github.com/angular/angular.js/wiki/Understanding-Scopes#ng-repeat
因此,要解決這個問題,確保在JS聲明父第一:
例如
$scope.parent
依次爲:
$scope.parent.child = "Imma child";
正是這樣做的孩子沒有家長會打破角。
我個人認爲這更像是關於建模系統的哲學問題。有些人使用'$ scope'作爲視圖模型,其他人則不使用。這是一個偏好問題。 – yuxhuang
請參閱http:// stackoverflow。com/questions/15623698/directive-isolate-scope-with-ng-repeat-scope/15645354#15645354 – yanhan