0

當在Angular指令定義中未設置範圍時,範圍屬性如何被繼承?Angular指令 - 如果範圍未設置,該怎麼辦?

Angular docs(下「指令定義對象」)有兩種情況:當scopetrue或當scope是一個對象({})。如果範圍沒有設置或者是錯誤的,該怎麼辦?在這種情況下,屬性是如何爲範圍及其子級繼承的?

+0

這個問題的一個很好的解釋,我在這裏找到了:[AngularJS中範圍原型/原型繼承的細微差別?](http://stackoverflow.com/questions/14049480/what-are-the-nuances-of -scope-prototypal-prototypical-inheritance-in-angularjs/14049482#14049482) –

回答

2

當範圍設置爲false(也默認值)在指令定義中,範圍的行爲根據您是否在做transclusion而不同。

如果你不是transclude,它幾乎使用父範圍。就像您沒有使用指令並將鏈接模板直接寫入頁面一樣。

Fiddle

Transclusion總是創建一個子範圍,但它一定父範圍在陌生的路上,當指令範圍是假的。您可以「讀取」父範圍,但只要向某個屬性「寫入」,它就不再與父範圍的相同屬性綁定,但現在是子範圍上的屬性,除非該屬性是對象。

Transcluded Fiddle

Child scope is the ones in green border. 

嘗試第一更改父範圍。在「var」輸入字段中輸入內容,您會看到子範圍的var也會發生變化。但是,當您在子範圍中更改var時,它不會更改父範圍,並且在父範圍中更改var不會影響子範圍,因爲當您從子範圍寫入var時,債券已損壞。這不適用於對象(對sp.var嘗試相同,你會看到你不能打破「債券」)。據開發商稱,這是預期和/或預期的行爲。

+1

關於添加另一個作用域@Quad的變換的好處。有一個很好的圖,說明如果你開始在這裏使用多個範圍,會發生什麼情況:http://stackoverflow.com/questions/16653004/confused-about-angularjs-transcluded-and-isolate-scopes-bindings – KayakDave

+0

謝謝,這個解釋我對第三方指令有奇怪的行爲。 –

+0

真的很甜蜜的演示!所以,而不是僅僅引用父作用域而是使用淺層副本。 –

1

如果範圍設置爲false(這是默認值),那麼該指令的範圍與父親相同 - 不創建新範圍。由於他們共享一個範圍,父母的任何變化都將反映在指令中,反之亦然。

因爲這不是很大,從封裝的角度來看,許多建議使用分離的範圍儘可能(一個隔離的範圍是,當你設置的範圍{}

相關問題