2013-05-15 12 views
5

पर अभिव्यक्ति पास करें मेरे पास एक निर्देश है, जिसका इसके टेम्पलेट में एक और निर्देश है।निर्देश

<nv-select ng-model="from" ng-options="item.name as item for item in from"></nv-select> 

यहाँ मैं बच्चा निर्देश का ng-options लिए एक अभिव्यक्ति के साथ दी जाने की कोशिश करो। दुर्भाग्य है कि हमेशा मुझे निम्न त्रुटि

Error: Syntax Error: Token 'as' is an unexpected token at column ... 

देता है अगर मैं बच्चे के निर्देश के select, यह सिर्फ ठीक काम करता है की ng-options में अभिव्यक्ति डाल दिया। मेरे nv-select निर्देश इस तरह दिखता है:

function() { 
    return { 
    restrict: 'E', // restrict to elements 
    replace: true, 
    transclude: true, 
    scope: { 
     ngModel: "=", 
     ngOptions: "&", 
     placeholder: '@' 
    }, 
    template: [ 
     '<div class="nv-select">', 
     '<select ng-model="ngModel" ng-options="ngOptions" ng-transclude></select>', 
     '<span class="icon suffix-icon-down">{{ text || placeholder }}</span>', 
     '</div>' 
    ].join(''), 
    link: function (scope, elem, attr) { 
     var select = elem.find('select'), 
      copyValues = function (e) { 
      if (e.options) { 
       scope.text = angular.element(e.options[e.selectedIndex]).text(); 
      } 
      }; 
     copyValues(elem[0]); 
     elem.bind('click', function (event) { 
     elem.toggleClass('active'); 
     }); 
     select.bind('change', function (event) { 
     scope.$apply(function() { 
      copyValues(event.target); 
     }); 
     }); 
    } 
    }; 
}; 

nv-select मूल रूप से एक <select> चारों ओर सिर्फ एक आवरण कस्टम स्टाइल सक्षम करने के लिए है।

क्या मुझे अभिव्यक्ति के साथ गुज़रने पर विशेष विचार करना है? मैं क्या गलत कर रहा हूं?

उत्तर

0

चलिए देखते हैं कि एंगुलरजेएस स्रोतों में एनजीओशन कैसे लागू किए गए हैं। यहाँ हम भाव के लिए regexp पैटर्न पा सकते हैं:

var NG_OPTIONS_REGEXP = /^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w\d]*)|(?:\(\s*([\$\w][\$\w\d]*)\s*,\s*([\$\w][\$\w\d]*)\s*\)))\s+in\s+(.*)$/ 

और फिर

if (! (match = optionsExp.match(NG_OPTIONS_REGEXP))) { 
     throw Error(
     "Expected ngOptions in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_'" + 
     " but got '" + optionsExp + "'."); 
    } 

    var displayFn = $parse(match[2] || match[1]), 
     valueName = match[4] || match[6], 
     keyName = match[5], 
     groupByFn = $parse(match[3] || ''), 
     valueFn = $parse(match[2] ? match[1] : valueName), 
     valuesFn = $parse(match[7]); 

तो आप इसका इस्तेमाल या नए लिख सकते हैं।

+1

आपको समझ में नहीं आता कि आप बिल्कुल जवाब देते हैं। –

0

वहाँ दो चीजें हैं जो मन में

  • एनजी-विकल्प वसंत एक स्ट्रिंग है, जो तब प्रासंगिक बिट देने के लिए पार्स किया गया है उम्मीद कर रहे हैं। आप ng-options="{{ngOptions}}" डालने का प्रयास कर सकते हैं और देख सकते हैं कि क्या समस्या से छुटकारा पाता है। हालांकि आप शायद पॉइंट दो के खिलाफ बैंग अप करेंगे:
  • आपने एक अलग दायरा बनाया है, भले ही आपको स्कोप पर काम करने वाली अभिव्यक्ति मिलती है, उस पर अभिव्यक्ति से प्रासंगिक गुण नहीं होंगे।

यदि {{}} चाल काम नहीं करती है तो ऐसा लगता है कि मूल एनजी-विकल्प स्ट्रिंग (यानी लिंकिंग फ़ंक्शन में) तक पहुंचने के बाद आपको मैन्युअल रूप से टेम्पलेट को संकलित करना होगा।

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