2015-10-14 6 views
10

मैंने एक कस्टम निर्देश बनाया है जिसमें दो मान हैं। पहला कॉन्फ़िगर ऑब्जेक्ट है और दूसरा डेटा ऑब्जेक्ट है। मैं अपने निर्देश के अंदर इस कॉन्फ़िगरेशन और डेटा ऑब्जेक्ट्स को संशोधित करता हूं जो इसे मूल दायरे में प्रतिबिंबित कर रहा है। जब मुझे कई बार निर्देश का उपयोग करना पड़ता है तो मुझे त्रुटि आ रही है।एंगुलरज निर्देश अलग-अलग दायरे + एक तरफा डेटा-बाध्यकारी वस्तुओं के लिए काम नहीं कर रहे हैं?

मैंने https://umur.io/angularjs-directives-using-isolated-scope-with-attributes/ का पालन किया और मैं अलग-अलग दायरे का उपयोग कर रहा हूं।

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

नीचे निर्देश का दायरा है।

scope: { 
    config: "&config", 
    dataObj: "&dataObj" 
} 
यहाँ

मैं इसे कैसे निर्देश

var config = scope.config(); 
var dataObj= scope.dataObj(); 

की लिंक समारोह में नहीं पहुंच रहा संदर्भ द्वारा कि पास संभालने हूँ यहाँ हो रहा है।

मैं जेएसबीएन जोड़ रहा हूं। कंसोल की जांच करें ऑब्जेक्ट का मान बदल रहा है और पैरेंट स्कोप में प्रतिबिंबित हो रहा है।

https://jsbin.com/vagowe/edit?html,js,output

+0

तो विशिष्ट समस्या क्या है? कृपया सभी प्रासंगिक कोड दिखाएं और एक [plunker] बनाएं (http://plnkr.co/edit/?पी = कैटलॉग) डेमो जो – charlietfl

+0

@charlietfl को प्रतिलिपि बनाता है मैंने डेमो जोड़ा है। आशा है कि आप मेरी समस्या को समझें – murli2308

+0

आपको निर्देशों को पारित करने के लिए '= 'दो-तरफा बाध्यकारी का उपयोग करना होगा। – cgTag

उत्तर

19

गुजर पाठ one-way binding(@) है और गुजर वस्तु two-way binding(=)

<custom-directive config="{{config}}"></custom-directive> 

निर्देश

scope: { 
     config: "@" 
    } 

में गुंजाइश पाठ के रूप में वस्तु गुजर स्ट्रिंग वस्तु को वापस परिवर्तित है लिंक

var config = angular.fromJson(scope.config); 
+0

बहुत अच्छा काम कर रहा है .. तो हम ऑब्जेक्ट को स्ट्रिंग ऑब्जेक्ट के रूप में पास कर रहे हैं और डायरेक्टिव पार्सिंग स्ट्रिंग में ऑब्जेक्ट सही है? – murli2308

+0

सच है, बजाय समारोह (&) माता-पिता गुंजाइश वस्तु के रूप में उपयोग कर सकते हैं तक पहुँचने का (यह दो तरह से बंधन)। –

+2

क्या यह इस समस्या को हल करने का उचित और एकमात्र तरीका है? – murli2308

4

आप सही हैं, मुद्दा यह है कि आपकी जावास्क्रिप्ट ऑब्जेक्ट संदर्भ द्वारा पारित की जा रही हैं। एक तरफा बाध्यकारी प्रतियों का उपयोग संदर्भ का उपयोग करते हुए, लेकिन संदर्भ अभी भी एक ही वस्तु को इंगित करेगा।

Angular docs for directives से मेरे छाप हमेशा:

  • '@' बाध्यकारी अंतर्वेशित तार के लिए लक्षित है
  • '=' बंधन संरचित डेटा कि स्कोप के बीच
  • साझा किया जाना चाहिए के लिए है
  • '&' बाध्यकारी बार-बार एक अभिव्यक्ति है कि माता-पिता गुंजाइश

यदि आप वान के लिए बाध्य है क्रियान्वित करने के लिए करना है वैकल्पिक रूप से

var config = angular.copy(scope.config()); 
var dataObj = angular.copy(scope.dataObj()); 

, तो आप इस के लिए बाध्यकारी एक दो तरह से उपयोग कर सकते हैं और वस्तु की नकल: टी माता पिता से बाध्य वस्तु के रूप में अपरिवर्तनीय के इलाज के लिए, आप एक गहरी प्रतिलिपि अपने लिंक कोड के अंदर वस्तुओं angular.copy का उपयोग कर बना सकते हैं इसी तरह:

scope: { 
    config: "=", 
    dataObj: "=" 
} 

// ... 
// Inside the link function of the directive. 
// Note that scope.config and scope.dataObj are no longer functions! 

var config = angular.copy(scope.config); 
var dataObj = angular.copy(scope.dataObj); 
+0

मैं एक ला '$ scope.config = angular.copy ($ scope.config __) हल, मेरे निर्देश नियंत्रक'। मुझे लगता है और अधिक समझ में आता है और कॉपी की गई सरणी रहता है। – Blauhirn

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