angular學習筆記(三十)-指令(7)-compile和link(1)

詩&遠方發表於2014-09-18

這篇主要講解指令中的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指令

 

相關文章