我在指令的編譯函數中根據DOM元素做了一些計算。我需要將結果存儲在作用域中,所以我試圖將這些數據傳遞給鏈接函數(可以訪問作用域),但我不知道該如何實現。如何將數據從編譯過程傳遞給angularjs中的鏈接函數?
我需要在編譯函數中執行這些計算,因爲我需要在DOM元素被其他指令的鏈接函數(使用指令優先級)處理之前訪問DOM元素。
我在指令的編譯函數中根據DOM元素做了一些計算。我需要將結果存儲在作用域中,所以我試圖將這些數據傳遞給鏈接函數(可以訪問作用域),但我不知道該如何實現。如何將數據從編譯過程傳遞給angularjs中的鏈接函數?
我需要在編譯函數中執行這些計算,因爲我需要在DOM元素被其他指令的鏈接函數(使用指令優先級)處理之前訪問DOM元素。
考慮到JavaScript符號的範圍,我認爲這已經足夠了。看到這個http://jsfiddle.net/JV7vH/1/
你定義了一個編譯函數,它必須返回一個鏈接函數。因爲它是一個內部函數,所以來自父函數的符號是可見的。
app.directive('ui',function ($compile) {
return {
restrict:'E',
template: '<div class="mcb">hey</div>',
compile: function ($tElement, $tAttrs) {
var foo = "a valuable value";
console.log('compiling' + foo);
return function (scope, element, attrs) {
console.log('linking:' + foo);
}
}
}
});
,你可能還需要閱讀有關order of execution of compile-link @joshdavidmiller表示,鑑於:
<div directive1>
<div directive2>
<!-- ... -->
</div>
</div>
執行的順序是
directive1: compile
directive2: compile
directive1: controller
directive1: pre-link
directive2: controller
directive2: pre-link
directive2: post-link
directive1: post-link
謝謝。我試着複製小提琴,但有兩個指令應該產生不同的輸出,如果我在連接函數中做console.log(foo),它會輸出最後一個值兩次,而在編譯函數當然很好。奇怪的是,類似的指令在你的小提琴中起作用。 –
您是否在任何時候調用$ compile(element)(scope)?更重要的是,如果你有嵌套的指令,它會首先調用所有的編譯函數,然後鏈接(你的鏈接函數是嚴格的後鏈接函數) –
我錯過了** var ** foo! –
我使用jQuery.data succeded( )但我覺得這不是「有角度的方式」 –