2015-06-22 24 views
9

निर्देशित करने के लिए बुलियन मूल्य पास करना मैं अपने निर्देश में बूलियन मान पास नहीं कर सकता।कोणीय जेएस:

<city-zip city="clientCity" zip="clientZip" requiredParam="'true'"></city-zip> 

और निर्देश:

.directive('cityZip', function() { 
    return { 
     restrict: 'E', 
     templateUrl: '../templates/templateCityZip.html', 
     scope: { 
      city: '=', 
      zip: '=' 
     }, 
     controller: function($scope) {} 
    } 
}); 

किसी भी मदद की बहुत सराहना की जाएगी

यहाँ मेरी HMTL है। ,

return { 
    // code 
    link: link 
} 

function link(scope, $el, attrs) { 
    var requiredParam = attrs.requiredParam === 'true'; 
} 

कि एक बूलियन के लिए स्ट्रिंग मान विवश होंगे (यदि स्ट्रिंग मान 'सही' है, यह सच वापस आ जाएंगे, अन्यथा यह करना होगा:

+0

बस इसे देखने के लिए एक स्कोप चर बनाएं। स्ट्रिंग के रूप में पास करने की आवश्यकता नहीं है। आपको वैरिएबल – Fals

उत्तर

11

एचटीएमएल

<city-zip city="clientCity" zip="clientZip" required-param="true"></city-zip> 
<city-zip city="clientCity" zip="clientZip" required-param="{{ someBooleanValue }}"></city-zip> 

कोणीय

.directive('cityZip', function() { 
    return { 
     restrict: 'E', 
     templateUrl: '../templates/templateCityZip.html', 
     scope: { 
      city: '=', 
      zip: '=', 
      requiredParam:'@' 
     }, 
     link: function(scope) { 
      console.log("requiredParam", scope.requiredParam); 
     } 
    } 
}) 
+1

मुझे खेद है, यह रिटर्न अपरिभाषित है। –

+1

अब जांचें, संपादित करें 'आवश्यक-param =', 'आवश्यक पैरा =' –

+0

मैंने इसे बदल दिया है। क्या आप कृपया एक ले सकते हैं एनजी-आवश्यक के बारे में मेरी निचली टिप्पणी देखें? –

7

link के अंदर, आप विशेषता का उपयोग कर सकते झूठी वापसी।)

यहां मुख्य भाग यह है कि !!'true' और !!'false' दोनों के बाद से स्ट्रिंग मान "सत्य" या "झूठी" को अपने बूलियन रूप में परिवर्तित करने का तरीका है। समाधान और विस्तारित चर्चा के लिए this answer देखें।

यदि आपको अपने नियंत्रक में मान का उपयोग करने की आवश्यकता है, तो आप scope ऑब्जेक्ट में एक ही पैटर्न कर सकते हैं और इसे अपने कूड़े हुए रूप में युग्मित नियंत्रक में पास कर सकते हैं।

+0

@JBNizet के रूप में पास करना चाहिए, हाँ, मुझे अभी एहसास हुआ कि मैंने टिप्पणी करने से पहले अपना जवाब बदल दिया है (अब यह कहता है कि 'var आवश्यक पैरा == attrs.requiredParam ===' true'' –

+0

आपके उत्तर के लिए धन्यवाद। मेरा निर्देश काम नहीं कर रहा है, संभव है क्योंकि एक ही समय में लिंक और नियंत्रक? क्या आप मुझे यह बता सकते हैं कि इसे नियंत्रक में कैसे किया जाए? मुझे यह भी नहीं पता कि लिंक क्यों है। –

+1

@ ज़िगसन, मैं एंगुलरजेएस दस्तावेज़ों को पढ़ने का सुझाव दूंगा निर्देश, यह लिंक का उपयोग करने के लिए बहुत अच्छी व्याख्या प्रदान करता है। –

1

3 मानकों है कि आप लिंक समारोह जो निर्देश पर काम में पारित कर सकते हैं कर रहे हैं। पैरामीटर्स scope, element और attributes हैं।

  1. scope नियंत्रक कि निर्देश के तहत रखा जाता है की गुंजाइश देता है।

  2. element डोम तत्व है जिस पर वह

  3. गुण सभी डोम तत्व गुण उस तत्व पर कर रहे हैं के बारे में जानकारी गुजरता लागू किया जाता है के बारे में जानकारी से गुजरता है।

    <city-zip ng-app="myapp" city="clientCity" zip="clientZip" required-param="true"></city-zip> 
    
    angular.module("myapp", []).directive('cityZip', function() { 
    return { 
        restrict: 'E', 
        templateUrl: '', 
        scope: { 
         requiredParam:'@' 
        }, 
        link: function(scope, $el, attrs) { 
         alert(attrs.requiredParam); 
        } 
    } 
    

    })

कार्य jsFiddle

+0

आपके प्रयास के लिए धन्यवाद। मुझे सच या गलत लगता है लेकिन किसी भी तरह से मुझे लगता है कि यह वास्तव में बूलियन नहीं है। मैं अपने निर्देश टेम्पलेट में एनजी-आवश्यक = "आवश्यक पैराम" का उपयोग कर रहा हूं: मुझे सत्यापन त्रुटियां मिलती हैं हालांकि एनजी-आवश्यक सत्य पर सेट है। –

+0

यह काम कर रहा है, मैं आवश्यक पैरा को बांधना भूल गया हूं (उन्हें घुंघराले ब्रैकेट में डाल दें)। –

4

मैं सबसे सरल/साफ जवाब अभी तक इस प्रश्न के लिए शामिल नहीं किया गया है लगता है। यह जवाब भी एक बूलियन विशेषता के लिए HTML5 Spec भीतर फिट बैठता है - http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes

2.5.2 बूलियन गुण

विशेषताओं का एक नंबर बूलियन विशेषताएँ हैं। तत्व पर बूलियन विशेषता की उपस्थिति वास्तविक मान का प्रतिनिधित्व करती है, और विशेषता की अनुपस्थिति झूठी मान का प्रतिनिधित्व करती है।

तो विशेषता मौजूद है, अपने मूल्य या तो खाली स्ट्रिंग या विशेषता के विहित नाम के लिए एक ASCII केस-संवेदी मुकाबला नहीं है कि, कोई प्रमुख या खाली स्थान के अनुगामी के साथ एक मान होना चाहिए।

बुलियन विशेषताओं पर "सत्य" और "झूठी" मानों की अनुमति नहीं है। पर एक झूठा मान का प्रतिनिधित्व करता है, विशेषता को पूरी तरह से छोड़ा जाना है।

HTML:

<city-zip city="clientCity" zip="clientZip" requiredParam></city-zip> 

और निर्देश:

.directive('cityZip', function() { 
    return { 
     restrict: 'E', 
     templateUrl: '../templates/templateCityZip.html', 
     scope: { 
      city: '=', 
      zip: '=' 
     }, 
     controller: function($scope, $attrs) { 
      $scope.requiredParamExists = $attrs.hasOwnProperty('requiredParam'); 
     } 
    } 
}); 

सरल, बूलियन विशेषताओं के लिए एचटीएमएल 5 कल्पना, और एक गुंजाइश चर के लिए एक स्ट्रिंग मजबूर करने के लिए कोई ज़रूरत नहीं के साथ सफाई से फिट बैठता है ('requiredParam': '=')।

उपरोक्त उदाहरण कोड में नोट करें, यदि आवश्यक हो, तो आवश्यक चर $scope और $attrs एक छोटी स्ट्रिंग में बदल जाएंगे और कोड तोड़ देंगे, लेकिन यह एक और मुद्दा है।

+0

इस कार्यान्वयन के साथ बड़ी समस्या यह है कि यदि आप इस प्रकार के विशेषता टेम्पलेट के साथ अपने घटक के अंदर एक घटक का उपयोग करना चाहते हैं, और साथ ही गतिशील रूप से उस विशेषता को शामिल या शामिल नहीं करना चाहते हैं। उदाहरण के लिए, यदि आप HTML तत्व को दोहराते हुए और ng-if का उपयोग करके ui-select की "एकाधिक" विशेषता को गतिशील रूप से w/o चालू करना चाहते हैं। इस अकेले के आधार पर मैं व्यक्तिगत रूप से इस उत्तर में पैटर्न का उपयोग करने की सलाह नहीं देता हूं। – sean2078

+0

@ sean2078 मैं काफी ट्रैकिंग नहीं कर रहा हूं, क्योंकि यह कुछ समय हो गया है क्योंकि मैंने इस मुद्दे पर काम किया था। क्या आप पोस्टरिटी के लिए समस्या का एक उदाहरण और/या जो आपको बेहतर काम करने के लिए मिला है? – ryanm