2013-04-14 3 views
32

मैं एक पारंपरिक फॉर्म को नियंत्रक के भीतर से सबमिट करना चाहता हूं। परिदृश्य यह है कि मैं अपने वेब सर्वर पर एक मार्ग हिट करना चाहता हूं और इसकी प्रतिक्रिया पर रीडायरेक्ट करना चाहता हूं, जो मैं HTML में नियमित रूप से कर सकता हूं, लेकिन सबमिट बटन दबाए जाने पर भी मैं अपने फ़ील्ड पर कुछ सत्यापन करना चाहता हूं, और अगर सत्यापन विफल रहता है, तो मैं मार्ग नहीं करना चाहता हूं।क्या मैं एक नियंत्रक से सबमिट फॉर्म को ट्रिगर कर सकता हूं?

मुझे एनजी-वैध के बारे में पता है, लेकिन मैं केवल बटन दबाए जाने पर सत्यापन करना चाहता हूं।

क्या सशर्त रूप से एक नियंत्रक के भीतर से सबमिट करने का कोई तरीका है?

उत्तर

8

क्या आपने अपने फॉर्म पर ng-submit निर्देश का उपयोग करने का प्रयास किया था? आप अपने सत्यापन के बाद सच/गलत वापस आ सकते हैं।

नियंत्रक

app.controller('MainCtrl', ['$location', function($scope, $location) { 
    $scope.submit = function(user) { 
    var isvalid = true; 
    // validation 
    if (isvalid) { 
     $http.get('api/check_something', {}).then(function(result) { 
      $location.path(result.data); 
     }); 
     return true; 
    } 
    return false; //failed 
    } 
}); 

एचटीएमएल (यदि आप एक कार्रवाई विशेषता नहीं होना चाहिए)

<form name="formuser" ng-submit="submit(user)"> 
    <input type="text" ng-model="user.firstname" /> 
    <input type="text" ng-model="user.lastname" /> 
    <button type="submit">Submit</button> 
</form> 
+2

मेरे पास यह विचार था, लेकिन मुझे एक क्रिया निर्दिष्ट करने की आवश्यकता थी। –

+0

यह ओपी पूछताछ के विपरीत है। एचटीएमएल फॉर्म सबमिशन ट्रिगर होने से पहले यह एक 'हुक' जोड़ता है। ओपी पूछता है कि कोणीय नियंत्रक से उस फॉर्म सबमिशन को कैसे ट्रिगर करना है, न कि पहले से चलने वाले जमा करने के लिए एक हुक कैसे जोड़ना है। – Piero

33

आप फॉर्मकंट्रोलर को सबमिट विधि जोड़ सकते हैं। मैंने ऐसा किया:

<form ng-form-commit action="/" name='payForm' method="post" target="_top"> 
    <input type="hidden" name="currency_code" value="USD"> 
    <button type='button' ng-click='save(payForm)'>buy</button> 
</form> 

.directive("ngFormCommit", [function(){ 
    return { 
     require:"form", 
     link: function($scope, $el, $attr, $form) { 
      $form.commit = function() { 
       $el[0].submit(); 
      }; 
     } 
    }; 
}]) 

.controller("AwesomeCtrl", ["$scope", function($scope){ 
    $scope.save = function($form) { 
    if ($form.$valid) { 
     $form.commit(); 
    } 
    }; 
}]) 
2

यह ऐसा करने के लिए 'कोणीय' तरीका नहीं है लेकिन आप वेनिला जावास्क्रिप्ट का उपयोग करके फ़ॉर्म सबमिट कर सकते हैं। उदाहरण के लिए आप प्रपत्र एक आईडी देने के लिए और कर सकते हैं:

document.getElementById('myForm').submit()

या आप इसे क्लिक कर सकते हैं अगर आप एक बटन सबमिट करें:

document.getElementById('myForm-submit').click()

मैंने पाया कि पहले एक नहीं था डेटा बाइंडिंग्स रखें (मैं इसे एक ऐसे प्रोजेक्ट पर इस्तेमाल कर रहा था जिसमें एक JQuery विजेट था जिसमें कोई कोणीय विकल्प नहीं था), लेकिन दूसरे ने बाइंडिंग रखी। मुझे लगता है कि JQuery विजेट कैसे लिखा गया था इसके साथ यह करना है।

आप वेनिला जे एस यहाँ के साथ रूपों को ट्रिगर के बारे में अधिक देख सकते हैं:

How to submit a form using javascript?

0

, @ से ReklatsMasters के जवाब का विस्तार करता है, तो आप फार्म प्रस्तुत करने से पहले एक मूल्य बदलना चाहते , तो आप ऐसा तरह कर सकता है ...

<form ng-form-commit action="/" name='payForm' method="post" target="_top"> 
    <input type="hidden" id="currency_code" name="currency_code" value="USD"> 
    <button type='button' ng-click='save('GBP', payForm)'>buy</button> 
</form> 

.directive("ngFormCommit", [function(){ 
    return { 
     require:"form", 
     link: function($scope, $el, $attr, $form) { 
      $form.commit = function($newCurrency) { 
       $el[0].querySelector('#currency_code').value = $newCurrency; 
       $el[0].submit(); 
      }; 
     } 
    }; 
}]) 

.controller("AwesomeCtrl", ["$scope", function($scope){ 
    $scope.save = function($newCurrency, $form) { 
    if ($form.$valid) { 
     $form.commit($newCurrency); 
    } 
    }; 
}]) 
संबंधित मुद्दे

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