2017-08-10 103 views
2

嗨我正在angularjs中开发Web应用程序。我在一个html页面中有两种形式。下面是结构。如何使用angularjs一次性向服务器发送多个表单数据?

<form name="form1"> 
    <input type="text" name="fname" /> 
    <input type="text" name="lname" /> 
    <input type="submit" value="Next" /> 
</form> 

<form name="form2"> 
    <input type="text" name="address" /> 
    <input type="text" name="state" /> 
    <input type="submit" value="Next" /> 
</form> 

在点击第一种形式的下一个提交按钮,我想验证第一种形式,我想滚动到第二形式,并且禁止第一种形式。

在点击form2的下一个提交按钮时,我想要验证第二个表单,并且我想使用两个表单(form1和form2)中的$ http提交数据到服务器。 我可以知道这是可能实现吗?我也可能知道这是我正在遵循的正确方式还是其他与我的要求有关的事情?任何建议或帮助将不胜感激。谢谢。

+0

是其可能的。您只需捕获第一个表单的值和提交第二个表单的值,使用formData附加所有您捕获的值。 – Vivz

+0

嗨Vivz。谢谢。点击第一个提交按钮后,我可以验证第一个表单并滚动到第二个表单,最后我能够从这两个表单中捕获数据并提交它? –

+0

如何从多个表单中捕获数据? $ scope.modelname? –

回答

1

您可以将所有值绑定到一个共同的目标。我在提交第一个表单后启用第二个表单。在第二种形式提交功能中,您只需循环访问常用对象的值并将其附加到formData。如果您没有任何理由拥有两种形式,则可以将其合并为一个。

注意:我还没有添加任何表单验证。对于添加的表单验证,请参阅https://codepen.io/sevilayha/pen/xFcdI

HTML

<form name="form1" ng-submit="enableForm2()"> 
    <input type="text" name="fname" ng-model="obj.fname" /> 
    <input type="text" name="lname" ng-model="obj.lname" /> 
    <input type="submit" value="Next" /> 
</form> 

<form name="form2" ng-show="enableForm" ng-submit="finalSubmit()"> 
    <input type="text" name="address" ng-model="obj.address" /> 
    <input type="text" name="state" ng-model="obj.state" /> 
    <input type="submit" value="Next" /> 
</form> 

JS

var app = angular.module('myApp', []); 
app.controller('myCtrl', function($scope, $http) { 
    $scope.obj = {}; 
    $scope.enableForm = false; 
    $scope.enableForm2 = function() { 
     $scope.enableForm = true; 
    } 
    $scope.finalSubmit = function() { 
     $http({ 
      method: 'POST', 
      url: YourURL, 
      withCredentials: true, 
      headers: { 
       'Content-Type': undefined 
      }, 
      data: {}, 
      transformRequest: function(data, headersGetter) { 
       var formData = new FormData(); 
       angular.forEach($scope.obj, function(value, key) { 
        formData.append(key, value); 
       }) 
       return formData; 
      } 
     }).then(function(data) { 
      $scope.enableForm=false; 
      }).catch(function(data, status) { 

      }) 
    } 
}); 
1

您可以通过直接提交实现Ajax调用。此外,表单提交不是必需的。 (添加表单标签是可选的)

<!DOCTYPE html> 
 
<html> 
 
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.css"> 
 
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
 
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-animate.min.js"></script> 
 
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-aria.min.js"></script> 
 
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-messages.min.js"></script> 
 

 
<!-- Angular Material Library --> 
 
<script src="http://ajax.googleapis.com/ajax/libs/angular_material/1.0.4/angular-material.min.js"></script> 
 
<body> 
 

 
<div ng-app="myApp" ng-controller="myCtrl"> 
 

 
<p>Personal Info</p> 
 
<input type="text" ng-model="form1.fname" name="fname"/> 
 
<input type="text" ng-model="form1.lname" name="lname"/> 
 
<input type="button" ng-click="SubmitForm()" value="Next"/> 
 

 

 
<p>Address Info</p> 
 
<input type="text" ng-model="form2.address" name="address"/> 
 
<input type="text" ng-model="form2.state" name="state"/> 
 
<input type="button" ng-click="SubmitForm()" value="Next"/> 
 

 

 
</div> 
 

 
<script> 
 
    var app = angular.module('myApp', ['ngMaterial']); 
 

 
    app.controller('myCtrl', function ($scope, $http, $q, HTTPService) { 
 

 
     $scope.form1 = { 
 
      fname: '', 
 
      lname: '' 
 
     }; 
 
     
 
     $scope.form2 = { 
 
      address: '', 
 
      state: '' 
 
     }; 
 
     
 
     $scope.SubmitForm = function() { 
 
      
 
      let submitFormData = { 
 
       form1: $scope.form1, 
 
       form2: $scope.form2 
 
      }; 
 
     
 
      HTTPService.SubmitData(submitFormData); 
 
     } 
 
     
 
    }); 
 
\t 
 
\t app.factory('HTTPService', function ($http, $q) { 
 
     return { 
 
      SubmitData: function (formData) { 
 
      let apiUrl = 'http://localhost:2000/...'; 
 
      var req = { 
 
       method: 'POST', 
 
       url: apiUrl + "SaveData.php", 
 
       headers: { 
 
        "Content-Type": "application/json", 
 
        "Authorization": '', 
 
        "Access-Control-Allow-Origin": "*" 
 
       }, 
 
       data: formData 
 
      }; 
 

 
      var result = $http(req) 
 
      .then(function(response) { 
 
       return angular.fromJson(response.data); 
 
      }, function(response) { 
 
       return null; 
 
      }); 
 

 
      return result; 
 
     }, 
 
     }; 
 
    }); 
 
</script> 
 
</body> 
 
</html>

+0

谢谢。当我跑我得到错误。 –

+0

检查包含的所有依赖项文件并发布错误... –

0

你可以做些事情像下面

<form name="form1" ng-submit="moveNext(user)"> 
    <input type="text" ng-model="user.fname" name="fname" required/> 
    <input type="text" ng-model="user.fname" name="lname" required/> 
    <input type="submit" value="Next"/> 
</form> 
<form name="form2" ng-submit="submit(addressData)"> 
    <input type="text" ng-model="addressData.address" name="address"/> 
    <input type="text" ng-model="addressData.state" name="state"/> 
    <input type="submit" value="Next"/> 
</form> 

,并在控制器

$scope.userDetails = {}; 
$scope.addressDetails = {}; 
$scope.moveNext = function(userData){ 
    $scope.userDetails = userData //Save user Data here and implement logic to scroll to next form and validation 
} 

$scope.submit = function(addressData){ 
    $scope.addressDetails = addressData; 
    // and validate the form and Submit data to server here as per your requirement 
} 
1

使用$范围还你会得到不同形式的字段值。

1

HTML代码

<div ng-app="App" ng-controller="Ctrl"> 
<form name="myForm"> 
<!-- first nested form --> 
    <div ng-form="form1"> 
    <label><p>Personal Info</p></label>  
    <input type="text" name="fname" ng-model="myForm.fname"/> 
    <input type="text" name="lname" ng-model="myForm.lname"/> 
    </div> 
<!-- second nested form --> 
<div ng-form="form2"> 
    <label><p>Address Info</p></label> 
    <input type="text" name="address" ng-model="myForm.address"/> 
    <input type="text" name="state" ng-model="myForm.state"/> 
</div> 
<!-- etc. --> 
<input type="submit" ng-click="SubmitForm()" value="Next"/> 
</form> 
</div> 

JS /控制器代码

var app = angular.module('App'); 

app.controller('Ctrl', function ($scope) { 
    $scope.SubmitForm = function() { 
     var SubmitForm = $scope.myForm; 
     console.log(SubmitForm); 
     } 
    }); 
相关问题