2013-08-28 5 views
9

यदि मैं एक अलग दायरे का उपयोग कर रहा हूं तो मैं एक विशेषता पर एक चर पारित कर सकता हूं।एंजुलरज विरासत (अलग नहीं) के साथ निर्देश के लिए चर पारित कर रहे हैं

<my-directive baz='foo.bar'> 

तब यानी, पर निर्देश के जावास्क्रिप्ट

.directive('myDirective', function() { 
    return { 
    scope: { 
     'baz': '=' 
    } 
    } 
}); 

वहाँ एक विरासत गुंजाइश के साथ कुछ ऐसा ही करने के लिए कोई रास्ता नहीं है? लिंक फ़ंक्शन बस स्ट्रिंग पास करता है।

अभी मैं चर वैरिएबल को पार्स कर रहा हूं और इसे स्कोप से मेल खाता हूं। $ Parent। ऐसा लगता है कि ऐसा करने के लिए एक सहायक कार्य या आसान तरीका होना चाहिए।

+0

क्या आप निर्देशक कोड के भीतर से मूल दायरे तक पहुंचने का मतलब रखते हैं? –

उत्तर

14

उपयोग $eval या $parse:

<my-directive baz='foo.bar'> 

.directive('myDirective', function($parse) { 
    return { 
    scope: true, 
    link: function(scope, element, attrs) { 
     console.log(scope.$eval(attrs.baz)); 
     var model = $parse(attrs.baz); 
     console.log(model(scope)); 
     // if you want to modify the value, use the model, not $eval: 
     model.assign(scope, "new value"); 
    } 
    } 
}); 
+0

मुझे $ पार्स के बारे में पता नहीं था। ऐसा करने का यह एक अच्छा तरीका है। – BoxerBucks

0

आप निर्देश में गुंजाइश वस्तु घोषित नहीं करते, कोई अलग गुंजाइश सेटअप होगा और आप पर पहुंच मिल जाएगी उस दायरे को पारित किया जाता है जहां से डीओएम में div घोषित किया जाता है।

कुछ इस तरह:

.directive('myDirective', function() { 
    return { 
    function(scope, element, attrs){ 
     //scope here = the inherited scope from the DOM 
    } 
} 

तो आप अपने निर्देश DIV टैग में घोषणा की है, तो आप वास्तव में एक विशेषता के रूप में मूल्य में भेजने की जरूरत नहीं है - तुम सिर्फ इसे से बाहर खींच सकते हैं गुंजाइश।

3
इस कोड के साथ

:

link: function(scope, elem, attrs) {} 

आप

attrs 

तत्व का उपयोग सभी गुण इस निर्देश को असाइन प्राप्त करने के लिए कर सकते हैं।

तो आप किसी भी दायरे में एटर्स असाइन कर सकते हैं और इसे अपने ई.एक्स टेम्पप्ले में उपयोग कर सकते हैं।

scope.someValue = attrs.attrName; 

सारांश में:

निर्देशक:

link: function(scope, elem, attrs) { 
     scope.someValue = attrs.attrName; 
    } 

निर्देशक टेम्पलेट:

<div> {{someValue}} <div> 

निर्देशक कॉल

<my-directive attrName="foo"> </my-directive> 
+0

यह केवल तारों और शायद बूल आदि के साथ काम करेगा, वस्तुओं नहीं, जो शायद समस्याग्रस्त हो जाएगा। – Millenjo

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