理解$Scope
執行概要
在AngularJS,一個子scope通常原型繼承於它的父scope。應用於這個規則的表達式是一個使用scope:{...}
的指令,這將創建一個『孤島』scope(非原型繼承)。這種構造通常在創建一個可復用組件指令的時候使用。
Scope繼承通常是垂直的,並且你通常不需要知道它的發生,直到你嘗試在子scope中使用2-way數據綁定到一個在父scope中定義的原始類型。scope不起作用的原因,很多是由於在它的父類中有同名的屬性。AngularJS不會這么做,這是由JavaScript原型繼承自己做的。新的AngularJS開發者經常不了解的是,ng-repeat、ng-switch、ng-view、ng-include都會創建一個新的子scope,所以問題經常在這些指令中出現。
在你的model中,帶有「.」將會確認原型繼承在起作用。所以使用<input type="text" ng-model="someObj.prop1">
比<input type="text" ng-model="prop1">
更好。
如果你真的想要(或需要)使用一個原始的方式,有兩項工作:
- 在子scope中,使用
$parent.parentScopeProperty
。這將阻止子scope創建它自己的屬性。 - 在父scope上創建一個方法,並且從子scope中調用它,傳遞原始值到父scope中(並不總是起作用)。