2013-06-04 51 views
1

我在指令的編譯函數中根據DOM元素做了一些計算。我需要將結果存儲在作用域中,所以我試圖將這些數據傳遞給鏈接函數(可以訪問作用域),但我不知道該如何實現。如何將數據從編譯過程傳遞給angularjs中的鏈接函數?

我需要在編譯函數中執行這些計算,因爲我需要在DOM元素被其他指令的鏈接函數(使用指令優先級)處理之前訪問DOM元素。

+0

我使用jQuery.data succeded( )但我覺得這不是「有角度的方式」 –

回答

5

考慮到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 
+0

謝謝。我試着複製小提琴,但有兩個指令應該產生不同的輸出,如果我在連接函數中做console.log(foo),它會輸出最後一個值兩次,而在編譯函數當然很好。奇怪的是,類似的指令在你的小提琴中起作用。 –

+0

您是否在任何時候調用$ compile(element)(scope)?更重要的是,如果你有嵌套的指令,它會首先調用所有的編譯函數,然後鏈接(你的鏈接函數是嚴格的後鏈接函數) –

+0

我錯過了** var ** foo! –

相關問題