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