對指令一直都是一知半解,實際運用起來更是麻煩多多。
指令建立對象的scope參數可以預設為false,表示指令的scope可以原型鍊的方式繼承于外部作用域。現在解釋一下原型鍊繼承。
原理
- 在原生javascript中,子類繼承父類是通過prototype屬性實作。判斷一個屬性是否存在時,會一層一層的找,直到頂層。
- 在Angular中,作用域原型繼承通過$parent屬性實作,子作用域如果找不到,就會去外部作用域找。
實戰
雖說機制一樣,但是angular中的作用域機制是和視圖綁在一塊的,是以需要多加一個心眼。
比如在指令的視圖中,如果你想在指令中實作雙向綁定外部作用域,就要像這樣。
如果是這樣
視圖作用域機制就會在作用域中建立一個新的變量。
總結
最後,再次了解一遍指令作用域的繼承機制。
scope為false時,指令作用域原型繼承于外部作用域,可以直接(原型機制)通路外部作用域。
注意是通路。很明顯,視圖機制是對作用域中的屬性進行指派,是以如果要和外部作用域實作雙向綁定,需要做額外的處理。