मैं बस सोच रहा था कि मुझे वास्तव में सही तरीके से इसका उपयोग करने में सक्षम होने के लिए एक फॉर्म में इनपुट तत्व पर name
और ng-model
दोनों निर्दिष्ट क्यों करना है। उदाहरण के लिए, निम्नलिखित के साथ:मुझे AngularJS में इनपुट पर नाम और एनजी-मॉडल दोनों निर्दिष्ट करने की आवश्यकता क्यों है?
<form name='test'>
<div>
<input type='radio'
value='create-new'
ng-model='toggle'
required />
<input type='radio'
value='use-existing'
ng-model='toggle'
required />
</div>
<div ng-switch='test.$invalid'>
<div ng-switch-when='true'>Invalid!</div>
<div ng-switch-when='false'>Valid!</div>
</div>
</form>
जब मैं एक रेडियो बटन का चयन नहीं करते मैं उत्पादन Invalid!
मिलेगा - यह सही व्यवहार है। हालांकि, नकारात्मकता यह है कि मैं इस मॉडल तक पहुंचने का एकमात्र तरीका $scope.toggle
के माध्यम से कर सकता हूं - तत्व स्वयं $scope.test
(फॉर्म कंटेनर) के अंदर नाम से संदर्भित नहीं होगा। $scope.test
में toggle
के लिए सत्यापन नियम शामिल हैं, लेकिन आपको यह बताने का कोई तरीका नहीं है कि उन सत्यापन नियम toggle
से संबंधित हैं क्योंकि नाम मौजूद नहीं है।
हम इसे चारों ओर इनपुट पर एक नाम विशेषता डाल स्विच करने के लिए थे, तो:
<form name='test'>
<div>
<input type='radio'
value='create-new'
name='toggle'
required />
<input type='radio'
value='use-existing'
name='toggle'
required />
</div>
<div ng-switch='test.$invalid'>
<div ng-switch-when='true'>Invalid!</div>
<div ng-switch-when='false'>Valid!</div>
</div>
</form>
तो हमारे ng-switch
नीचे हमेशा वैध दिखाई नहीं देगा, भले ही मैं उल्लेख किया है कि इनपुट ही आवश्यक है पर। इसके अलावा, toggle
अब $scope.test
के अंदर दिखाई देता है, इसलिए मैं $scope.test.toggle
की कहीं भी वैधता की जांच कर सकता हूं (उस तत्व पर इनलाइन विशेषता के बिना)।
अगर मैं दोनों दृष्टिकोण गठबंधन और प्रयोग name
और ng-model
दोनों, तो दोनों परिणामों जोड़ दिया जाता है और मैं परिणाम मैं उम्मीद होता है - मैं देख सकता हूँ $scope.test.toggle
और मॉडल ही सही ढंग से मान्य है।
मेरा प्रश्न यह उचित व्यवहार क्यों है? यह jquery.validate.unobtrusive
कहने के लिए अलग लगता है, जहां name
विशेषता वह बिट है जो आंतरिक रूप से तत्व के सत्यापन नियमों से संबंध रखती है।