2012-09-28 20 views
19

मैं अपने directive परिभाषा के भाग के रूप में निम्नलिखित है कहते हैं:क्या एक अलग स्कोप उपनाम के लिए डिफ़ॉल्ट मान प्रदान करने का कोई तरीका है?

scope: { 
    prop1: '@' 
} 

वहाँ prop1 के लिए किसी भी तरह से करता है, तो निर्देश एक prop1 विशेषता नहीं है कोई डिफ़ॉल्ट मान प्राप्त करने के लिए है? निश्चित रूप से, मैं जांच सकता हूं कि यह स्वयं को परिभाषित किया गया है और इसे सेट किया गया है, लेकिन the property isn't always set when you would expect। मैं बस सोच रहा हूं कि दस्तावेज में कोई वाक्यविन्यास याद आया है, या यदि ऐसा करने का एक अच्छा मानक तरीका है। धन्यवाद।

उत्तर

19

यह इस बात पर निर्भर करता है कि आप किस डिफ़ॉल्ट मान को असाइन करना चाहते हैं। आप माता-पिता दायरे में एक नाम के लिए डिफ़ॉल्ट करने के लिए, सेटिंग चाहते हैं निर्देश के compile समारोह में एक डिफ़ॉल्ट विशेषता मान काम करेगा:

 
    compile: function(element, attrs) { 
    if (attrs.person == undefined) { 
     attrs.$set("person", "person"); 
    } 
    ... 

आप निर्देश डिफ़ॉल्ट मान प्रदान करना चाहते हैं, यह के रूप में एक छोटे से चालबाज हो जाता है कोणीय आपको अलग-अलग दायरे में उपनामों को असाइन नहीं करने देगा (आपको अलगाव वाले माता-पिता के असाइनमेंट को अपवादित करने के लिए "वॉचर से" असाइन करने योग्य मॉडल अभिव्यक्ति "अपवाद प्राप्त होगा)। हालांकि आप विशेषता को वैकल्पिक के रूप में चिह्नित करके इसे रोक सकते हैं (जिसका अर्थ यह है कि जब संपत्ति ओमिट हो जाती है तो कोणीय श्रोता को पंजीकृत नहीं करेगा)।

 
    scope: { 
    person: "=?" 
    }, 
    link: function(scope, element, attrs) { 
    if (scope.person == undefined) { 
     scope.person = "Bob"; 
    } 
    ... 
    } 
+1

मैंने पहले कभी दायरे की संपत्ति में '?' नोटेशन नहीं देखा है। क्या वहां कुछ जगह है जो दस्तावेज है? या एक पहेली जो दिखाता है कि काम कर रहा है? – dnc253

+0

https://github.com/angular/angular.js/commit/ac899d0da59157fa1c6429510791b6c3103d9401 – epeleg

+1

दो चीजें: 1) 'angular.isUndefined (...)' और 2) का उपयोग करें, यह यहां प्रलेखित है: https: //docs.angularjs। संगठन/एपीआई/एनजी/सेवा/$ संकलन # निर्देश-परिभाषा-वस्तु – icfantv

-3
scope['prop1'] = scope['prop1'] || '@' 
+0

मुझे लगता है कि एक सामान्य जावास्क्रिप्ट भावना में काम करना, लेकिन यह सवाल तब है जब विशेष रूप से AngularJS के साथ निर्देश परिभाषित करते हैं। मैं नहीं देखता कि मैं इस वही अवधारणा का उपयोग कैसे कर सकता हूं। – dnc253

+0

कोणीय एक त्रुटि फेंक देगा यदि आप 'वाक्य' वैकल्पिक ध्वज के साथ इस वाक्यविन्यास को करने का प्रयास करते हैं। @niall द्वारा उपरोक्त समाधान का पालन करें। – icfantv

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

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