'=' का अर्थ क्या है? कोणीयजेएस निर्देश में अलग-अलग गुंजाइश घोषणा?


127

क्या बराबरी के बाद प्रश्न चिन्ह का विशेष अर्थ है? अर्थात:

scope: {foo: '=?'}

अगर 'फू' को हल नहीं किया जा सकता है तो क्या इसका मतलब यह नहीं है कि 'त्रुटि न उठाएं?'

जवाबों:


154

हाँ:

'आइसोलेटेड' स्कोप एक ऑब्जेक्ट हैश लेता है जो मूल स्कोप से निकले स्थानीय स्कोप गुण के एक सेट को परिभाषित करता है। ये स्थानीय गुण टेम्प्लेट के लिए मूल्यों को अलग करने के लिए उपयोगी हैं। स्थानीय परिभाषा इसके स्रोत के लिए स्थानीय गुंजाइश संपत्ति का एक हैश है:

=या =attr- एक स्थानीय स्कोप प्रॉपर्टी और attrविशेषता के मूल्य के माध्यम से परिभाषित नाम की पैतृक स्कोप प्रॉपर्टी के बीच द्वि-दिशात्मक बाइंडिंग सेट करें । यदि कोई attrनाम निर्दिष्ट नहीं है, तो विशेषता नाम को स्थानीय नाम के समान माना जाता है। दिया <widget my-attr="parentModel">और विजेट की परिभाषा scope: { localModel:'=myAttr' }, तो विजेट गुंजाइश संपत्ति मूल गुंजाइश पर localModelमूल्य को प्रतिबिंबित करेगा parentModel। किसी भी परिवर्तन को parentModelपरिलक्षित किया जाएगा localModelऔर किसी भी परिवर्तन localModelको प्रतिबिंबित करेगा parentModelयदि पैरेंट स्कोप प्रॉपर्टी मौजूद नहीं है, तो यह एक NON_ASSIGNABLE_MODEL_EXPRESSION अपवाद को फेंक देगा। आप इस व्यवहार का उपयोग कर से बचने कर सकते =?या =?attrफ्लैग लगाने के लिए वैकल्पिक के रूप में संपत्ति।

यह गुंजाइश संपत्ति को प्रभावित करने वाले हर डाइजेस्ट पर अपेक्षित त्रुटि को ट्रिगर करना चाहिए:

parentSet = parentGet.assign || function() {
// reset the change, or we will throw this exception on every $digest
lastValue = scope[scopeName] = parentGet(parentScope);
     throw Error(NON_ASSIGNABLE_MODEL_EXPRESSION + attrs[attrName] +
     ' (directive: ' + newScopeDirective.name + ')');
};

//...


if (parentValue !== scope[scopeName]) {
    // we are out of sync and need to copy
    if (parentValue !== lastValue) {
        // parent changed and it has precedence
        lastValue = scope[scopeName] = parentValue;
    } else {
        // if the parent can be assigned then do so
        parentSet(parentScope, lastValue = scope[scopeName]);
    }
}

1
समझ में आता है, लेकिन यह निर्देश अपवाद क्यों नहीं है। पैरेंट स्कोप प्रॉपर्टी मौजूद नहीं है और स्कोप असाइनमेंट '=' का उपयोग नहीं कर रहा है?
निकिता

7
यह केवल मान के सेट होने पर त्रुटि को फेंकने के लिए लगता है, जैसे कि यहाँ: plnkr.co/edit/OSpaC6sPE0hY9yAeFghr?p=preview
मैट ज़ुनर्ट

@ इस्बोर यह वर्तमान में उत्तर में जुड़ा हुआ है, लेकिन यहाँ एक और अधिक सीधा लिंक है: डॉक्स.संगुलरजस.ओआरजी
जेसन

3
हालाँकि व्यक्तिगत रूप से मेरी इच्छा है कि इसे सीधे स्कोप खंड में प्रलेखित किया गया था न कि $ संकलन में।
जेसन एक्सेलसन

उत्तर के लिए धन्यवाद, मैं एक साल से अच्छी तरह से कोणीय का उपयोग कर रहा हूं और कभी भी "=" नहीं मिला? एक निर्देश पर विकल्प। आपने अभी-अभी मेरा दिन ;-)
wilblack
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.