angular学习笔记(三十)-指令(7)-compile和link(1)

时间:2024-01-15 09:50:20

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