2015-06-22 18 views
6

कोणीय में कस्टम निर्देश बनाते समय मुझे एक चिंता है। जब मैं एक लिंक फ़ंक्शन का उपयोग कर रहा हूं, तो मुझे यकीन नहीं है कि अटर्स या स्कोप के साथ विशेषताओं तक पहुंचने पर वास्तविक अंतर क्या है। उदाहरण के लिए कोड के इस टुकड़े डालें: attrs से और गुंजाइश द्वारा 'शीर्षक' विशेषता तक पहुँचने कस्टम निर्देश स्कोप बनाम attrs

myApp.directive('someDirective', function() { 
    return { 
     restrict: 'E', 
     replace: true, 
     scope: { 
      title: '=title' 
     }, 
     template: '<img/>', 
     link: function(scope, element, attrs) { 
      if (scope.title) { 
       // do something here 
      } 
      if (attrs.title){ 
       // do something here 
      } 
     }, 
    } 

मेरी टिप्पणियों से एक समान प्रभाव पड़ता है। वास्तविक अंतर क्या है?

+0

कृपया यह http://stackoverflow.com/questions/14300986/angularjs- डायरेक्टिव- पृथक-स्कोप-and-attrs –

उत्तर

19

अंतर यह है कि विशेषता परिभाषा द्वारा स्ट्रिंग प्रकार का है। हमेशा। आपके मामले में attrs.title सचमुच स्ट्रिंग के बराबर होगा जो आप HTML में विशेषता में पास करते हैं।

हालांकि, scope.title विशेषता attr.title विशेषता का विश्लेषण और मूल्यांकन किया गया है।

पूर्व। आप HTML में कुछ इस तरह का उपयोग करते हैं

<some-directive title="name"></some-directive> 

जहां $scope.name = "Thomas Mann" दायरे में परिभाषित है, तो attr.title स्ट्रिंग "name" हो जाएगा, जबकि scope.title"Thomas Mann" हो जाएगा।

+0

बहुत बढ़िया उत्तर देखें। उसमें जोड़ने के लिए, आप दायरे के संदर्भ में विशेषता का एक पार्स संस्करण प्राप्त करने के लिए 'स्कोप। $ Eval (attrs.title)' भी कर सकते हैं। –

+0

यह सब है? मुझे लगता है कि जब आप बाध्यकारी दायरे के लिए @ का उपयोग करते हैं तो इसे स्ट्रिंग के रूप में भी पारित किया जा रहा है, इसलिए इसका एक ही प्रभाव है, है ना? – Marcin86

+1

@ मार्किन 86, एक विशेषता में बहुत कुछ पारित एक स्ट्रिंग है, और कुछ स्कोप वैरिएबल के रूप में पारित कुछ भी डेटा प्रकार हो सकता है। लेकिन जैसा कि मैंने उपरोक्त टिप्पणी की है, वैसे भी आप दायरे के संदर्भ में विशेषता का मूल्यांकन करने के लिए 'evope (attrs.title)' स्कोप भी कर सकते हैं। –

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