2013-06-08 8 views
9

क्या निर्देश के अंदर एक निजी फ़ंक्शन बनाना संभव है? मुझे निर्देश के टेम्पलेट को भरने के निर्देश के अंदर एक जटिल प्रक्रिया करने की आवश्यकता है।निर्देश के अंदर निजी फ़ंक्शन बनाना

कुछ इस (एचटीएमएल) की तरह:

<textarea the-result="data"> 
</textarea> 

जावास्क्रिप्ट:

angular 
.module("MyModule") 
.directive("theResult", [function() { 
    return { 
     scope: { 
      theResult: "=" 
      // calculatestuff = function(d){ // ... } can't put it here (error) 
     }, 
     template: ' ... ' 
      + '{{calculatestuff(theResult.someproperties)}}' 
      + ' ... ' 
    } 
}]) 

मैं calculatestuff कहाँ रख सकते हैं?

उत्तर

13

ध्यान दें कि directive(directiveName, directiveFunction) केवल directiveFunction रिटर्न का उपयोग करता है। आप इस समारोह के अंदर जो कुछ भी आप चाहते हैं कर सकते हैं, जैसे, उदाहरण के लिए, अन्य समारोह को परिभाषित:

angular 
.module("MyModule") 
.directive("theResult", [function() { 
    var calculateStuff = function (d) { 
     // ... 
    }; 

    return { 
     // ... 
    } 
}]); 

लेकिन निश्चित रूप से, calculateStuff$digest चक्र के दौरान अब मौजूद नहीं और गुंजाइश से लिंक नहीं है, तो आप इसे अपने टेम्पलेट के अंदर कॉल करने में सक्षम नहीं होगा। यदि यह वास्तव में है कि आप क्या करना चाहते हैं, को जोड़ने के चरण के दौरान, दायरे में अपने समारोह डाल करने के लिए विचार:

angular 
.module("MyModule") 
.directive("theResult", [function() { 
    return { 
     scope: { 
      theResult: "=" 
     }, 
     template: ' ... ' 
      + '{{calculatestuff(theResult.someproperties)}}' 
      + ' ... ', 
     link : function ($scope) { 
      $scope.calculateStuff = function (d) { 
       // ... 
      }; 
     } 
    } 
}]); 

जब से तुम एक अलग दायरे का उपयोग करें, इस समारोह के निर्देश के बाहर से उस तक पहुंच नहीं होगा।

+0

मैंने कोशिश की लेकिन ब्राउजर में अंतिम परिणाम खाली है :( –

+0

आप सही हैं, मैं थोड़ा थक गया हूं। मैंने अपना जवाब संपादित कर दिया है :)। – Blackhole

+0

जब मैंने लिंक को लिंक के दायरे में स्थानांतरित कर दिया, तो यह काम करता है। धन्यवाद! –

संबंधित मुद्दे