2013-05-11 12 views
17

मैं निर्देश में इंटरपोलेटेड मान कैसे सेट करूं? मैं निम्नलिखित कोड से सही मान पढ़ सकता हूं, लेकिन मैं इसे सेट करने में सक्षम नहीं हूं।कोणीय निर्देश में एक इंटरप्लाटेड मूल्य कैसे सेट करें?

js:

app.directive('ngMyDirective', function() { 
    return function(scope, element, attrs) { 
     console.log(scope.$eval(attrs.ngMyDirective)); 

     //set the interpolated attrs.ngMyDirective value somehow!!! 
    } 
}); 

एचटीएमएल:

<div ng-my-directive="myscopevalue"></div> 

जहां myscopevalue मेरी नियंत्रक की गुंजाइश पर एक मूल्य है।

उत्तर

24

आप गुंजाइश पर एक मूल्य निर्धारित करना चाहते हैं, लेकिन संपत्ति (आगे समय की) का नाम पता नहीं है, तो आप object[property] सिंटैक्स का उपयोग कर सकते हैं:

scope[attrs.myNgDirective] = 'newValue'; 

तो में स्ट्रिंग विशेषता में एक बिंदु होता है (उदाहरण के लिए myObject.myProperty), यह काम नहीं करेगा; आप $eval का उपयोग एक काम करने के लिए कर सकते हैं:

// like calling "myscopevalue = 'newValue'" 
scope.$eval(attrs.myNgDirective + " = 'newValue'"); 

[अपडेट: आप वास्तव में $eval के बजाय $parse उपयोग करना चाहिए। ।

app.directive('ngMyDirective', function() { 
    return { 
     scope: { 
      theValue: '=ngMyDirective' 
     }, 
     link: function(scope, element, attrs) { 
      // will automatically change parent scope value 
      // associated by the variable name given to `attrs.ngMyDirective` 
      scope.theValue = 'newValue'; 
     } 
    } 
}); 

आप this Angular/jQuery color picker JSFiddle example में इस का एक उदाहरण देख सकते हैं, जहां scope.color को बताए निर्देश के अंदर अपने आप अपडेट: यदि आप एक अलग गुंजाइश उपयोग कर रहे हैं Mark's answer देखें]

, आप = एनोटेशन का उपयोग कर सकते परिवर्तक नियंत्रक के दायरे पर निर्देश पारित किया।

+0

दायरा [attrs.myNgDirective] = 'newValue'; काम किया! हालांकि myNgDirective का मान सीधे दायरे पर होना चाहिए, न कि दायरे के उप-वस्तु। जो – Anton

+0

समझ में आता है मेरा मानना ​​है कि आप ऑब्जेक्ट नोटेशन के लिए असाइनमेंट अभिव्यक्ति के साथ '$ eval' करने में सक्षम होना चाहिए; मैं अपना जवाब अपडेट करूंगा। –

+0

जो ठंडा होगा। कुछ गुंजाइश की तरह। $ eval (attrs.ngMyDirective = 'new value')? – Anton

45

जब भी कोई निर्देश एक अलग दायरे का उपयोग नहीं करता है और आप एक विशेषता का उपयोग करके एक स्कोप प्रॉपर्टी निर्दिष्ट करते हैं, और आप उस संपत्ति के मूल्य को बदलना चाहते हैं, तो मैं $parse का उपयोग करने का सुझाव देता हूं। (मुझे लगता है कि वाक्य रचना $ eval की तुलना में अच्छे है।)

app.directive('ngMyDirective', function ($parse) { 
    return function(scope, element, attrs) { 
     var model = $parse(attrs.ngMyDirective); 
     console.log(model(scope)); 
     model.assign(scope,'Anton'); 
     console.log(model(scope)); 
    } 
}); 

fiddle

$parse काम करता है या नहीं, विशेषता एक बिंदु शामिल हैं।

+0

दिलचस्प सामान। जवाब के लिए धन्यवाद। आपके पास एक बिंदु हो सकता है कि पार्स eval की तुलना में उपयोग करने के लिए एक बेहतर शब्द/वाक्यविन्यास हो सकता है।चीयर्स – Anton

+3

स्कोप अलगाव के बिना '=' को लागू करने का निश्चित रूप से सही तरीका है। –

+0

मुझे दृश्य में प्रतिबिंबित मेरे निर्देश को बदलने के लिए 'model.assign (...)' के बाद 'स्कोप। $ लागू करें)() 'जोड़ना पड़ा। क्या कोई क्लीनर समाधान है? – Juljan

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