2015-03-12 3 views
5

में मेरा चेकबॉक्स इनपुट है जो एक वैरिएबल trueVal पर आधारित "सत्य" मान गतिशील रूप से सेट करता है, जो एक स्ट्रिंग है।एनजी-ट्रू-वैल्यू एक्सप्रेशन के रूप में सिंगल कोट के साथ डायनामिक वैल्यू पास करना

<input ng-model="foo" ng-true-value="'{{trueVal}}'"> 

उदाहरण के लिए, trueVal = "something" के लिए, foo === "something" जब चेकबॉक्स चयनित है।

इस मामले को छोड़कर यह काम करता है जब trueVal इसमें एक सिंगल कोट के साथ एक स्ट्रिंग के बराबर होता है: Customer didn't understand

Error: [$parse:lexerr] Lexer Error: Unterminated quote at columns 27-28 ['] in expression ['Customer didn't understand'].

मैं सिंगल कोट्स पट्टी नहीं कर सकते क्योंकि स्ट्रिंग foo के रूप में-है स्थापित किया जाना चाहिए: इस मामले में, कोई त्रुटि हुई है।

व्यापक संदर्भ:

मैं options की एक सूची है कि मैं पीछे के अंत से प्राप्त के आधार पर चेक बॉक्स के एक समूह बना रहा हूं:

<div ng-repeat="(key,option) in options"> 
    <input type="checkbox" 
     ng-model="foo[key]" 
     ng-true-value="'{{option.trueVal}}'" 
     ng-false-value="null"> 
</div> 

तो, दिया:

options = { 
      0: {trueVal: "Customer was late"}, 
      1: {trueVal: "Customer didn't understand"} 
      }; 

मुझे उम्मीद है कि:

foo = { 
    1: "Customer didn't understand" 
}; 

यदि दूसरा बॉक्स चेक किया गया है।

उत्तर

6

लघु संस्करण, ng-true-val एक निरंतर अपेक्षा करता है और एक पैरामीटर के रूप में निम्नलिखित अभिव्यक्ति पारित किया जा रहा है: जो अन-समाप्त एकल उद्धरण की वजह से विकृत है मूल्यांकन के लिए 'Customer didn't understand',।

सरल (लेकिन कुछ हद तक बदसूरत) दृष्टिकोण दृश्य में \' साथ ' को बदलने के लिए होगा (यह वास्तविक मूल्य नहीं बदलता है - बस वह कूटबद्ध):

<input type="checkbox" ng-model="foo" 
     ng-true-value="'{{trueVal.replace('\'', '\\\'')}}'" 
     ng-false-value="null"> 

बेहतर दृष्टिकोण शायद उपयोग कर रहा है ng-change:

<input type="checkbox" ng-model="t" 
     ng-change="foo = t ? trueVal : null"> 

अधिक बड़ा संस्करण

कवर के तहत ng-true-value कॉल $parse सेवा: var parseFn = $parse(expression), और parseFn.constant === true की अपेक्षा करता है।बाद ही सच्चा है अगर अभिव्यक्ति एक निरंतर है:

expression = 'string';  // string literal 
expression = '5'   // number literal 
expression = {v: 'string'} // object literal with a constant 
expression = 'foo' + 'bar'; // expression that evaluates to a constant 

अपने मामले में आप चर trueVal लेने के लिए, एक मूल्य के {{trueVal}} करने के लिए इसे अंतर्वेशन, एक अभिव्यक्ति '{{trueVal}}' है कि अंततः के रूप में मूल्यांकन किया जाएगा का हिस्सा बन करने की जरूरत है ऊपर समझाया।

यह, क्यों \' करने के लिए ' कार्यों के प्रतिस्थापन है, क्योंकि यह निकल जाता एकल उद्धरण के रूप में यदि आप अभिव्यक्ति सीधे लिखा है:

ng-true-value="'Customer didn\'t understand'" 

क्या आप वाकई को दोहरे उद्धरण चिह्नों के लिए नहीं होगा कि कर रहे हैं (" ,

ng-true-value='"{{trueVal}}"` 

हो जाएगा ताकि निश्चित रूप से:) options के लिए अपने मूल्यों में, आप भी बस उद्धरण के आदेश की आवश्यकता के बिना रिवर्स replace करने के लिए कर सकता है , उसी कारण से असफल हो अगर trueVal मूल्य में डबल कोट्स थे: something with "quotes"

+0

व्यापक संपादन और उत्तर के लिए एक बार फिर धन्यवाद। मैंने पहला दृष्टिकोण लिया है। इसके अलावा, काश मैं आपकी शक्ति को अवशोषित कर सकता हूं। –

1

इसे आजमाएं।

मार्कअप में

<input type="checkbox" ng-model="dummyModel" ng-model-options="{getterSetter: true}"> 

नियंत्रक

var trueValue = "my true' value"; 
var falseValue = false; 
var _model; 
$scope.dummyModel = function (val) { 
    if (angular.isDefined(val)) { 
     _model = val ? trueValue : falseValue 
    } 
    return _model === trueValue; 
} 

उपयोग _model में डेटाबेस के लिए प्रस्तुत करने के लिए।

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