2014-07-09 9 views
20

में एक अलग दायरे के बिना निर्देश स्कोप विशेषताएँ उत्तीर्ण गुणों के साथ विस्तारित करते हुए माता-पिता के दायरे को विरासत में लाने का कोई तरीका है?AngularJS

मैं लिंकिंग फ़ंक्शन में डीओएम को बदलने के बिना सीधे टेम्पलेट से पुन: प्रयोज्य निर्देशों के पैरामीटर पास करना चाहता हूं।

<form-input icon="icon-email" label="email" ng-model="data.input"></form-input> 

इस तरह एक निर्देश के लिए::

उदाहरण के लिए

<div class="form-group"> 
     <label>{{label}}</label> 
     <div class="input-group"> 
     <div class="{{icon}}">@</div> 
     <input class="form-control" placeholder="Email" ng-model="mail.email"> 
     </div> 
    </div> 

एनजी मॉडल, माता पिता के दायरे में है इस मामले में एक पूरे रूप को नियंत्रित करने के लिए, लेकिन मुझे नहीं लगता कि नियंत्रक में स्टाइल गुणों को स्टोर करना आवश्यक है।

क्या अलग-अलग दायरे के बिना सीधे टेम्पलेट में पैरामीटर पास करने का कोई तरीका है?

उत्तर

26

आप इस तरह के मूल दायरे को 'विस्तारित' करने में सक्षम नहीं होंगे। हालांकि आपके उद्देश्य को आपके निर्देश के लिंक फ़ंक्शन में इंजेक्शन दिए गए निर्देश टैग विशेषताओं का उपयोग करके पूरा किया जा सकता है।

तो उदाहरण के लिए। अपने label चर संलग्न के लिए, अपने निर्देश के लिंक समारोह नीचे दिखाई देगा:

link: function ($scope, $element, $attributes) { 
     $scope.label = $scope.$eval($attributes.label); 
     } 


आप एक लाइव डेमो के लिए नीचे दिए गए plunker की जाँच कर सकते हैं।
http://plnkr.co/edit/2qMgJSSlDyU6VwdUoYB7?p=preview

+1

मुझे लगता है कि लिंक के आसपास कोई रास्ता नहीं है। आपका प्लंक सिर्फ वही है जो मुझे चाहिए था। – BarakChamo

+1

मैंने "$ scope। $ Eval" भाग हटा दिया, और "$ विशेषताएँ" में सीधे प्रदान किए गए मान का उपयोग किया, क्योंकि मैं स्ट्रिंग की अपेक्षा कर रहा हूं, और नहीं चाहता कि निर्देश के उपयोगकर्ताओं को उद्धरण के साथ सब कुछ लपेटना पड़े। क्या यह एक बुरा अभ्यास है? रास्ते के समाधान के लिए धन्यवाद! – eitanfar

+0

@eitanfar एक शाब्दिक में पास करने के लिए, आप सही हैं - आपको '$ scope। $ Eval' कॉल करने की आवश्यकता नहीं है, क्योंकि इंटरपोलेट करने के लिए कुछ भी नहीं है। http://stackoverflow.com/a/15671573/3123195 में अच्छी उच्च स्तरीय स्पष्टीकरण के साथ-साथ दस्तावेज़ों के लिंक भी हैं। –

5

answer from Angad स्थिर जोड़ने के लिए काम करेंगे, लेकिन अगर विशेषता के मान को जोड़ने के बाद बदल सकते हैं, इस अपडेट नहीं किया जाएगा। आप इस की जरूरत है, sollution संदर्भ की बजाय स्ट्रिंग के रूप में मूल्य पारित करने के लिए होगा:

$attributes.$observe('label', function(newValue){$scope.label=newValue}); 

: निर्देश में

<form-input icon="icon-email" label="{{email}}" ng-model="data.input"></form-input> 

, एक $ विशेषता पर निरीक्षण गुंजाइश चर का अद्यतन करने के लिए जोड़ अब विशेषता मान बदलते हैं तो स्कोप चर गतिशील रूप से बदल जाएगा।

+0

क्या आप दो तरह से डेटा बाध्यकारी कर सकते हैं? अलग गुंजाइश के बिना? – beNerd