簡體   English   中英

Angular指令-如果未設置范圍怎么辦?

[英]Angular directive - what if scope is not set?

如果未在Angular指令定義中設置范圍,如何繼承范圍屬性?

Angular文檔中 (在“指令定義對象”下),有兩種情況: scopetruescope為對象( {} )。 如果范圍未設置或為假,該怎么辦。 在這種情況下,如何為范圍及其子級繼承屬性?

在指令定義中將scope設置為false(也是默認值)時,scope的行為會根據您是否在進行transclusion而有所不同。

如果不進行transclude ,則幾乎使用父范圍。 就像您沒有使用指令,而是直接在頁面中編寫鏈接的模板一樣。

小提琴

包含總是創建一個子作用域,但是當指令作用域為false時,它將以一種奇怪的方式綁定到父作用域。 您可以“讀取”父作用域,但是一旦“寫入”屬性,它就不再綁定到父作用域的相同屬性,而是現在綁定到子作用域的屬性,除非該屬性是一個對象。

超越小提琴

Child scope is the ones in green border.

嘗試先更改父范圍。 在“ var”輸入字段中輸入內容,您將看到子范圍的var也將更改。 但是,當您在子范圍內更改var時,並不會更改父范圍,並且在父范圍內更改var不會影響子范圍,因為從子范圍寫入var時綁定已斷開。 這不適用於對象(在sp.var上嘗試相同,您將看到無法打破“綁定”)。 根據開發人員的說法,這是預期的和/或預期的行為。

如果范圍設置為false(這是默認設置),則該偽指令與父級具有相同的范圍-不會創建新的范圍。 由於它們共享作用域,因此對父項的任何更改都將反映在指令中,反之亦然。

由於從封裝的角度來看這不是很好,因此許多建議盡可能使用隔離范圍(隔離范圍是將范圍設置為{}時的隔離范圍)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM