2013-03-19 10 views
14

क्या AngularJS निर्देश पैरामीटर के रूप में पारित गुण का मूल्यांकन करने का कोई अच्छा तरीका है?मैं निर्देश में मूल्य मान का मूल्यांकन कैसे करूं?

link: function postLink(scope, element, attrs) {  
     debugger; // scope.$parent already knows the value of teacher here 
     scope.sendEmail = function(){ 
      alert(attrs.recipient); 
      //window.open("mailto:" + attrs.recipient); 
     } 
    } 

मैं निर्देश चाहते हैं teacher.email के मूल्य का उपयोग करने के लिए (ध्यान दें लिंक समारोह है:

यहाँ मेरी समस्या को दिखाने के लिए (मैं जानते हैं कि आपको एक निर्देश के बिना इस व्यवहार को लागू कर सकते हैं) एक simplified example है scope.$parent.teacher के लिए सही मान teacher.email स्ट्रिंग के बजाय।

+1

बस attrs.recipient को scope.recipient से प्रतिस्थापित करें –

उत्तर

22

जैसा कि @Ajay ने पहले से ही एक टिप्पणी में उल्लेख किया है, आप scope.recipient का उपयोग कर सकते हैं। यह काम करता है, क्योंकि आप अपने निर्देश में एक अलग गुंजाइश बनाया:

scope: {  
    recipient: "=" 
}, 

यह एक निर्देश गुंजाइश संपत्ति recipient नामित जो एक माता पिता के दायरे संपत्ति के लिए दो तरह डेटाबाउंड है बनाता है। कौन सी मूल संपत्ति? आपकी विशेषता द्वारा परिभाषित एक: recipient="teacher.email" – इसलिए माता-पिता स्कोप प्रॉपर्टी teacher.email स्कोप प्रॉपर्टी recipient को अलग करने के लिए बाध्य है।

यदि आपका निर्देश recipient के मान को परिवर्तित नहीं करेगा, तो आपको शायद '=' के बजाय '@' का उपयोग करना चाहिए।

scope: {  
    recipient: "@" 
}, 

आप हालांकि अपने HTML को बदलने के लिए की आवश्यकता होगी:: '@' हमें "एक तरह से तार" देता है

<sendemail recipient="{{teacher.email}}"></sendemail> 

sendEmail() फ़ंक्शन में, हम अभी scope.recipient उपयोग कर सकते हैं, बस जैसे हमने '=' के लिए किया था।


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

scope.$eval(attrs.recipient) 

का उपयोग करेंगे। यह जावास्क्रिप्ट प्रोटोटाइप विरासत के तरीके के कारण काम करता है। $ eval संपत्ति teacher.email की तलाश करेगा और इसे निर्देशक बाल दायरे पर नहीं ढूंढ पाएगा। इसके बाद यह प्रोटोटाइप श्रृंखला को मूल दायरे में चलाता है और उसे वहां पाता है।

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