這篇主要講解指令中的compile,以及它和link的微妙的關係.
link函式在之前已經講過了,而compile函式,它和link函式是不能共存的,如果定義了compile屬性又定義link屬性,那麼link屬性的定義會被忽略.原因繼續看講解:
1.compile的返回值:compile函式返回值有兩種可能
(1).返回pre-link函式和post-link函式:
一種是返回一個物件,物件具有兩個方法,第一個方法是pre-link函式,第二個方法是post-link函式.
compile:function(tEle,tAttrs,linker){ return { pre:function(scope,iEle,iAttrs,ctrl,linker){ }, post:function(scope,iEle,iAttrs,ctrl,linker){ } } }
(2).只返回post-link函式:
一種是隻返回一個函式,這樣的話,相當於pre-link函式不定義,只定義了一個post-link函式.如果compile函式沒有定義任何返回值,那麼,指令的link函式就會充當post-link函式.所以,如果compile已經定義了返回值,那麼,再定義link函式,link函式就會被忽略.
compile:function(tEle,tAttrs,linker){ return function(scope,iEle,tAttrs,ctrl,linker){ } }
2.compile函式有三個引數:tEle,tAttrs,linker:
(1)tEle:指令元素的jqLite包裝.
(2)tAttrs:指令元素的屬性的集合
(3)linker函式:請參考:angular學習筆記(三十)-指令(6)-transclude()方法(又稱linker()方法)-模擬ng-repeat指令