天天看點

Angular作用域繼承,原型通路機制

對指令一直都是一知半解,實際運用起來更是麻煩多多。

指令建立對象的scope參數可以預設為false,表示指令的scope可以原型鍊的方式繼承于外部作用域。現在解釋一下原型鍊繼承。

原理

  • 在原生javascript中,子類繼承父類是通過prototype屬性實作。判斷一個屬性是否存在時,會一層一層的找,直到頂層。
  • 在Angular中,作用域原型繼承通過$parent屬性實作,子作用域如果找不到,就會去外部作用域找。

實戰

雖說機制一樣,但是angular中的作用域機制是和視圖綁在一塊的,是以需要多加一個心眼。

比如在指令的視圖中,如果你想在指令中實作雙向綁定外部作用域,就要像這樣。

如果是這樣

視圖作用域機制就會在作用域中建立一個新的變量。

總結

最後,再次了解一遍指令作用域的繼承機制。

scope為false時,指令作用域原型繼承于外部作用域,可以直接(原型機制)通路外部作用域。

注意是通路。很明顯,視圖機制是對作用域中的屬性進行指派,是以如果要和外部作用域實作雙向綁定,需要做額外的處理。

繼續閱讀