2013-07-01 9 views
10

के लिए कोणीय जेएस डिफ़ॉल्ट मान 0gजैसे एनजी-मॉडल को डिफ़ॉल्ट मान प्राप्त करना संभव है?एनजी-मॉडल

मेरे पास एक ऐसा फॉर्म है जिस पर मैंने jQuery के serialize फ़ंक्शन का उपयोग किया है, और जब भी कोई मान मौजूद नहीं होता है, तब भी इसे क्रमबद्ध डेटा में शामिल किया जाएगा, उदा। {name: '', age: ''}

हालांकि, जब मैं कोणीय के $http का उपयोग करके इसे पोस्ट करने का उपयोग करके उपयोग करता हूं और $scope से मॉडल प्राप्त करता हूं, तो यह खाली होने पर undefined के रूप में दिखाई देता है।

+1

अपने नियंत्रक में, जोड़ने '$ scope.your_model_name_here = ''' –

+0

मैं इसे करने की कोशिश की कोशिश, लेकिन वह पूरे मॉडल में हुई एक खाली स्ट्रिंग जा रहा है, और यहां तक ​​कि किसी खाली वस्तु बनाई गई थी। हालांकि, एक समय में एक संपत्ति को स्पष्ट रूप से शुरू करना जैसे शुनुसैन के उत्तर कार्यों में। – whirlwin

उत्तर

9

आप अपने विचार में इनका उपयोग करने से पहले मॉडल में गुणों को आसानी से परिभाषित कर सकते हैं।

यदि आप अपना कंट्रोलर कोड दिखाते हैं तो मैं आपको दिखाऊंगा कि आपको उन्हें दायरे में जोड़ने के लिए क्या अपडेट करना होगा।

यह कुछ ऐसा दिखाई देगा:

अपने js फ़ाइल है कि एप्लिकेशन

angular.module("MyModule", []).controller('MyCtrl', ['$scope', function ($scope) { 
    $scope.myModel = {name:""}; 
}]); 

परिभाषित अपने HTML में

<input type="text" ng-model="myModel.name"/> 

नोट मैं वैश्विक चर/कार्य नहीं होने पसंद करते हैं तो मैं इस से बचने और खनन के लिए अनुमति देने के लिए कोणीय द्वारा प्रदान किए गए एक अलग वाक्यविन्यास का उपयोग कर रहा हूं।

+0

यह अभी तक जाने का तरीका प्रतीत होता है। – whirlwin

+0

हाँ निश्चित रूप से ध्यान में रखें, मैं अभी भी एक कोणीय नोब का थोड़ा सा हूं, लेकिन अब मैं इसे तीन परियोजनाओं पर बहुत सफलता के साथ उपयोग कर रहा हूं, जिसे मैं वर्तमान में काम कर रहा हूं अब तक का सबसे बड़ा है लेकिन सभी पैमाने पर ध्यान दिए बिना एक ही अवधारणा लागू होती है। बस नियंत्रकों, सेवाओं और निर्देशों को सीखना सीखें और आप बस कुछ भी कर सकते हैं, साथ ही यह एक बहुत बड़ा समुदाय है जो पहले से ही ऐसा लगता है और बहुत सारे महान घटक (एनजी-ग्रिड, गूगल-मैप्स, एक जोड़े को नाम देने के लिए)। कभी भी एक jQuery लड़का नहीं था जिसे मैं सीधे एएस 3/फ्लेक्स से कूद गया था, इसलिए यह बहुत परिचित और साफ है। स्नैग ज्यादातर मेरे लिए स्कोप अपडेट के आसपास हैं। – shaunhusain

+0

हां, मैं निश्चित रूप से * केवल * jQuery के विपरीत, भविष्य की परियोजनाओं में कोणीय का उपयोग करने की उम्मीद कर रहा हूं। – whirlwin

1

आपको jQuery serialize का उपयोग करने की आवश्यकता नहीं है। में

<form ng-controller="MyCtrl" ng-submit="submit()"> 
    <input type="text" name="name" ng-model="formData.name"> 
    <input type="text" name="age" ng-model="formData.age"> 
    <input type="submit" value="Submit Form"> 
</form> 

function MyCtrl($scope) { 
    $scope.formData = {}; 

    $scope.submit = function() { 
     $http.post('/someUrl', $scope.formData) 
    }; 
} 

ताकि $ http आप बस $ पारित कर सकते हैं scope.formData:

आपका प्रपत्र इस तरह दायरे करने के लिए बाध्य किया जाना चाहिए।

Is there a more effective way to serialize a form with angularjs?

+0

यही वह है जो मैं वर्तमान में कर रहा हूं। हालांकि, मुख्य समस्या यह है कि यह एक खाली वस्तु ('{}') रहेगी, और जब आप '$ scope.formData' कहेंगे तो अपरिभाषित मानों की परवाह नहीं करेंगे। मुझे जो चाहिए वह कुछ ऐसा है जो खाली मूल्यों को सुनिश्चित करता है। – whirlwin

+1

ओह मैं देखता हूँ। वैसे उस मामले में ऑब्जेक्ट को इस तरह अपने दायरे पर परिभाषित करें: $ scope.formData = {'name': null, 'age': null}; – StuR

10

तुम भी कोशिश कर सकते हैं:

<div ng-init="foo={}"> 
    <input type="text" ng-model="foo.name=''"/> 
</div> 

या:

<input type="text" ng-init="foo.name=''"/> 

यह पेश करेंगे:

foo = { name: '', .... } 
+0

इसके लिए धन्यवाद। यह मेरे छोटे आवेदन के लिए सबसे अच्छा समाधान था जहां नियंत्रक का निर्माण आवश्यक नहीं है (अभी तक)। – drj

+0

सहायता करने में खुशी हुई: डी – Neaped

0

कभी कभी, आप अगर पता नहीं है मान सेट है या नहीं। यही डिफ़ॉल्ट है।

मैं इसका उपयोग करता हूं जब मुझे यह सुनिश्चित करने की आवश्यकता होती है कि एक चर के पास कुछ मूल्य है। आप अपने नियंत्रक में सेट कर सकते हैं

$scope.possiblyEmptyVariable = $scope.possiblyEmptyVariable || "default value"; 

कोणीय बिना अच्छा काम करता है और साथ ही

// some object that may or may not have a property 'x' set 
var data = {}; 

// Set default value of "default" 
// carefull, values like 'null', false, 0 will still fall to defaults 
data.x = data.x || "default"; 

// Set default value of "default" 
// this will not fall to defaults on values like 'null', false, 0 
data.x = !"x" in data || "default"; 

आप, मूल्यों का एक समूह की स्थापना की angular.extend या jQuery का उपयोग करने की जरूरत है।विस्तार

data.z = "value already set"; 
var defaults = { x: "default", y: 1, z: "default" }; 
var newData = angular.extend({}, defaults, data); 
// { x: "default, y: 1, z: "value already set" } 

आशा है कि मदद करता है