轉(zhuǎn)自:http://www.reibang.com/p/e10ba0927ef1
在angularJs應用啟動之前简逮,它們是以HTML文本形式存在文本編輯器當中栽惶。應用啟動會進行編譯和鏈接拾稳,作用域會同HTML進行綁定。
在編譯的階段歧蒋,angularJs會遍歷整個的文檔并根據(jù)JavaScript中指令定義來處理頁面上什么的指令。通常情況下州既,如果設置了compile函數(shù)谜洽,說明我們希望在指令和實時數(shù)據(jù)被放到DOM中之前,進行DOM操作吴叶,在這個函數(shù)中進行諸如添加和刪除節(jié)點等DOM操作是安全的阐虚。
本質(zhì)上,當我們設置了link選項蚌卤,實際上是創(chuàng)建了一個postLink() 鏈接函數(shù)实束,以便compile() 函數(shù)可以定義鏈接函數(shù)。編譯函數(shù)compile負責對模板DOM進行轉(zhuǎn)換逊彭。鏈接函數(shù)link負責將作用域和DOM進行鏈接咸灿。
59687-053e8b8ee76b74a0.png
//demo1 最簡單的指令創(chuàng)建
ui.directive('header', function () {
return {
restrict: 'AE',
link: function (scope, element, attrs) {
}
}
});
//demo2 等價于demo1
ui.directive('header', function () {
return {
restrict: 'AE',
compile: function (element, attrs, transclude) {
return : function(scope, element, attrs){
}
}
}
});
//demo3 等價于demo1
ui.directive('header', function () {
return {
restrict: 'AE',
compile: function (element, attrs, transclude) {
return {
pre: function(scope, element, attrs){},
post: function(scope, element, attrs){}
}
}
}
});
如果同時設置了compile與link,那么會把compile所返回的函數(shù)當作鏈接函數(shù)侮叮,而link選項本身則會被忽略避矢。
作者:牽著毛驢看世界
鏈接:http://www.reibang.com/p/e10ba0927ef1
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)囊榜,非商業(yè)轉(zhuǎn)載請注明出處审胸。