2013-04-30 7 views
16

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

angular.module('portal.directives', []) 
     .directive('languageFlag', ['$routeParams', function(params) { 
      return function(scope, element, attrs) { 
       console.log(attrs["data-key"]); // returns undefined 
       console.log(element.attr('data-key')); // returns {{data-key}} 
       angular.element(element).css('border', '1px solid red'); 
      }; 
     }]); 

एचटीएमएल कोड है:

<ul> 
    <li ng-repeat="lng in flags"> 
     <a class="lngFlag {{flag.Key}}" data-key="{{flag.Key}}" data-id="{{lng.Id}}" ng-click="changeLangHash({'lng':lng.Id })" language-flag></a> 
    </li> 
</ul> 

धन्यवाद

+0

डैश के मामले में ऊंट केस का पालन करें - –

उत्तर

23

उपयोग $observe:

अवलोकन अंतर्वेशित विशेषताओं: उपयोग $observe विशेषताओं है कि प्रक्षेप शामिल का मान बदलता निरीक्षण करने के लिए (जैसे src="{{bar}}")। न केवल यह बहुत ही कुशल है बल्कि वास्तविक मूल्य को आसानी से प्राप्त करने का एकमात्र तरीका भी है क्योंकि लिंकिंग चरण के दौरान इंटरपोलेशन का मूल्यांकन नहीं किया गया है और इसलिए मूल्य इस समय undefined पर सेट किया गया है। - directives doc

return function(scope, element, attrs) { 
    attrs.$observe('key', function(value) { 
     console.log('key=', value); 
    }); 
} 

एक टिप्पणी में उल्लेख किया @FMM के रूप में, data कोणीय द्वारा छीन लिया जब यह विशेषता नाम है, इसलिए ऊपर key का उपयोग करते हैं, बल्कि dataKey से सामान्य हो जाता है।

+1

धन्यवाद। यह सांप नोटेशन वाले लोगों को छोड़कर सभी विशेषताओं पर काम करता है। डेटा-कुछ जैसे। लेकिन मैं आपका जवाब स्वीकार करता हूं क्योंकि यह वास्तव में अन्य विशेषताओं के साथ काम करता है। मैं आपके प्रयास और समय की सराहना करता हूं। –

+2

ऐसा लगता है कि कोणीय 'डेटा' उपसर्ग (http: //docs.angularjs) को ट्रिम कर रहा है।संगठन/गाइड/निर्देश): "वैकल्पिक रूप से निर्देश को एक्सएमएल, या डेटा के साथ प्रीफ़िक्स्ड किया जा सकता है- इसे HTML सत्यापनकर्ता अनुपालन करने के लिए।" "डेटा" के साथ अपने (तार्किक) विशेषता नामों को शुरू करना शायद एक बुरा विचार है। – FMM

10

attrs["dataKey"] कोशिश - इस तरह से है कि एचटीएमएल डैश (-) के साथ विशेषताओं को पार्स करता है। अगर आप {{something}} के बजाय दायरे से मूल्य चाहते हैं, आप कर सकते हैं दो बातें:

scope[attrs['dataKey']] - कार्य करेगी, लेकिन इस

करना चाहिए नहीं या $parse का उपयोग लेकिन तब का उपयोग नहीं करते `` {{ }} `

app.directive('languageFlag', ['$routeParams','$parse', function(params,$parse) { 
    return function(scope, element, attrs) { 
    var value = $parse(attrs.dataKey)(scope); 
    console.log(value); 
    angular.element(element).css('border', '1px solid red'); 
    }; 
}]); 

या आप $parse की तरह उसी तरह लेकिन साथ $interpolate उपयोग कर सकते हैं {{}}

+0

उत्तर देने के लिए धन्यवाद। console.log (attrs ["dataKey"]); // = अपरिभाषित console.log (दायरा [attrs ['dataKey']]); // = अपरिभाषित मैंने सभी {{}} को भी हटा दिया और कोशिश की। $ पार्स लेकिन फिर भी 'अपरिभाषित'। क्या समय पर अंतर्निहित मॉडल तक पहुंचने का कोई तरीका नहीं है? –

+0

$ पार्स के लिए मूल दायरा पास करना (उदा: '$ पार्स (attrs.uid) ($ scope। $ Parent)') ने मेरी समस्या हल की – manikanta

+0

@ g00fy लेकिन क्या होगा यदि विशेषता दो तरह से बाध्य मूल्य है? मेरा कोड केवल इसे निर्देश लोड पर पार्स करेगा, लेकिन वेरिएबल में किए गए परिवर्तनों को कभी भी ध्यान न दें (मूल दायरे से)। –

1

मैं ऑब्जेक्ट नोटेशन उपयोग करने का सुझाव देते हैं अगर आप निर्देश का लिंक समारोह है, जो attrs पैरामीटर हो जाता है के अंदर कर रहे हैं:

attrs.yourAttributeName

4

कोणीय स्ट्रिप्स 'डेटा-' कोई गुण बंद है, इसलिए यदि आपकी विशेषता 'डेटा-कुंजी' है, बस 'कुंजी' का उपयोग करें, न कि 'डेटाकी'

+0

मेरे पास "डेटा-एक्शनटाइप" नाम के साथ एक विशेषता है, केवल क्रिया प्रकार के साथ मुझे उस विशेषता से डेटा नहीं मिल रहा है। क्या यह नाम पूर्वनिर्धारित है? – Kathir

+0

@ कथिर हार्ड आपके कोड को देखे बिना कहें। उम्मीद है कि आपने 14 घंटे पहले पूछे जाने के बाद इसे समझ लिया है। यदि नहीं, तो आपको इस पृष्ठ पर दिए गए उत्तरों को देखने में सक्षम होना चाहिए और कुछ अलग-अलग चीजों को आजमाएं, इसे समझें। –

+0

आपके उत्तर के लिए धन्यवाद। कृपया नीचे अपना टैग देखें <<इनपुट प्रकार = "बटन" मूल्य = "ठीक है" id = "" ng-click = "getAttributejs ($ event)" class = "" data-actiontype = "kathir" /> 'वर्तमान में मैं हूं टैग से 'डेटा-' को हटा रहा है। मुझे अभी भी पता नहीं लगाया गया है। – Kathir

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