问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

angular怎么获取表格每一列的数据

发布网友 发布时间:2022-04-26 23:53

我来回答

1个回答

热心网友 时间:2022-04-20 02:48

我们会关注两种提交表单的方式:
旧方法:jQuery和PHP提交表单
新方法:AngularJS和PHP提交表单
首先看一下我们的表单,超级简单:

形式要求
实现页面无刷新表单处理
输入姓名和超级英雄别名
如果有错误,显示错误提示
如果输入有误,将输入变成红色
如果所有内容ok,显示成功提示
文档结构
在我们的展示中,仅需两个文件
index.html
process.php

表单处理
让我们新建一个PHP来处理表单。该页面非常小并且使用POST方式提交数据。
处理表单:这对我们来说并不是那么重要的。你可以使用其他你喜欢的语言来处理你的表单。
// process.php

<?php

$errors = array(); // array to hold validation errors
$data = array(); // array to pass back data

// validate the variables ======================================================
if (empty($_POST['name']))
$errors['name'] = 'Name is required.';

if (empty($_POST['superheroAlias']))
$errors['superheroAlias'] = 'Superhero alias is required.';

// return a response ===========================================================

// response if there are errors
if ( ! empty($errors)) {

// if there are items in our errors array, return those errors
$data['success'] = false;
$data['errors'] = $errors;
} else {

// if there are no errors, return a message
$data['success'] = true;
$data['message'] = 'Success!';
}

// return all our data to an AJAX call
echo json_encode($data);

这是一个非常简单的表单处理脚本。我们仅检查数据是否存在,如果存在,则不做任何处理和操做;如果不存在,则需要向$errors数组中添加一条信息。
为了返回我们的数据用于AJAX调用,我们需要使用echo和json_encode。这就是我们PHP表单处理所有需要做的操作。使用普通的jQuery AJAX或者Angular处理表单也是这样的。
展示表单
让我们创建一个HTML来展示我们的表单
<!-- index.html -->

<!doctype html>
<html>
<head>
<title>Angular Forms</title>

<!-- LOAD BOOTSTRAP CSS -->
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css">

<!-- LOAD JQUERY -->
<!-- when building an angular app, you generally DO NOT want to use jquery -->
<!-- we are breaking this rule here because jQuery's $.param will help us send data to our PHP script so that PHP can recognize it -->
<!-- this is jQuery's only use. avoid it in Angular apps and if anyone has tips on how to send data to a PHP script w/o jQuery, please state it in the comments -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>

<!-- PROCESS FORM WITH AJAX (OLD) -->
<script>
<!-- WE WILL PROCESS OUR FORM HERE -->
</script>
</head>
<body>
<div class="container">
<div class="col-md-6 col-md-offset-3">

<!-- PAGE TITLE -->
<div class="page-header">
<h1><span class="glyphicon glyphicon-tower"></span> Submitting Forms with Angular</h1>
</div>

<!-- SHOW ERROR/SUCCESS MESSAGES -->
<div id="messages"></div>

<!-- FORM -->
<form>
<!-- NAME -->
<div id="name-group" class="form-group">
<label>Name</label>
<input type="text" name="name" class="form-control" placeholder="Bruce Wayne">
<span class="help-block"></span>
</div>

<!-- SUPERHERO NAME -->
<div id="superhero-group" class="form-group">
<label>Superhero Alias</label>
<input type="text" name="superheroAlias" class="form-control" placeholder="Caped Crusader">
<span class="help-block"></span>
</div>

<!-- SUBMIT BUTTON -->
<button type="submit" class="btn btn-success btn-lg btn-block">
<span class="glyphicon glyphicon-flash"></span> Submit!
</button>
</form>

</div>
</div>
</body>
</html>

现在,我们有了表单。我们另外还使用了Bootstrap来使表单看起来不是那么丑。使用Bootstrap语法规则,每个input下含有一个spot来展示我们文本的错误信息。
使用jQuery提交表单
现在,让我们来使用jQuery处理表单提交。我会将所有的代码添加到空的<script>标签中
<!-- index.html -->

...

<!-- PROCESS FORM WITH AJAX (OLD) -->
<script>
$(document).ready(function() {

// process the form
$('form').submit(function(event) {

// remove the past errors
$('#name-group').removeClass('has-error');
$('#name-group .help-block').empty();
$('#superhero-group').removeClass('has-error');
$('#superhero-group .help-block').empty();

// remove success messages
$('#messages').removeClass('alert alert-success').empty();

// get the form data
var formData = {
'name' : $('input[name=name]').val(),
'superheroAlias' : $('input[name=superheroAlias]').val()
};

// process the form
$.ajax({
type : 'POST',
url : 'process.php',
data : formData,
dataType : 'json',
success : function(data) {

// log data to the console so we can see
console.log(data);

// if validation fails
// add the error class to show a red input
// add the error message to the help block under the input
if ( ! data.success) {

if (data.errors.name) {
$('#name-group').addClass('has-error');
$('#name-group .help-block').html(data.errors.name);
}

if (data.errors.superheroAlias) {
$('#superhero-group').addClass('has-error');
$('#superhero-group .help-block').html(data.errors.superheroAlias);
}

} else {

// if validation is good add success message
$('#messages').addClass('alert alert-success').append('<p>' + data.message + '</p>');
}
}
});

// stop the form from submitting and refreshing
event.preventDefault();
});

});
</script>

...

这里处理表单有不少的代码。我们有获取表单中变量的代码,有使用AJAX将数据发送至我们的表单的代码,有检查是否有错和显示成功提示的代码。除此之外,我们希望每次表单提交之后,过去的错误信息都会被清除。确实是不少代码。
现在,如果表单中含有错误,则:

如果提交成功:

现在,让我们看使用Angular来提交相同的表单。记住,我们不需要更改任何关于我们的PHP如何处理表单的内容,我们的应用依然会具备相同的功能(在同一个地方展示错误和成功信息)。
使用Angular提交表单
我们准备在之前使用的<script>标签中设置我们的Angular应用。所以删除里面的内容,我们就可以开始了。
设置一个Angular应用
步骤为:
1. 加载Angular
2. 设置mole
3. 这是controller
4. 将mole和controller应用于HTML
5. 设置双向变量绑定
6. 这是错误和信息
看起来好像是很多内容,但是最终,我们会用非常少的代码,并且看起来会非常简洁。另外,创建带有更多输入更大的表单,也会更容易。
Angular 组件和控制器
首先,加载Angular并且新建组件和控制器
<!-- index.html -->

...

<!-- LOAD JQUERY -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<!-- LOAD ANGULAR -->
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js"></script>

<!-- PROCESS FORM WITH AJAX (NEW) -->
<script>

// define angular mole/app
var formApp = angular.mole('formApp', []);

// create angular controller and pass in $scope and $http
function formController($scope, $http) {

}

</script>
</head>

<!-- apply the mole and controller to our body so angular is applied to that -->
<body ng-app="formApp" ng-controller="formController">

...

现在,我们有了Angular应用的基础。我们已经加载了Angular,创建了组件模块和控制器,并且将其应用于我们的网站。
接下来,我将展示双向绑定是如何工作的。
双向数据绑定
这是Angular的核心思想之一,也是功能最强大的内容之一。在Angular文档中,我们看到:“在Angular网页应用中的数据绑定,是模型和视图层之间的数据自动同步。”这意味着,我们需要在表单中抓取数据,使用$('input[name=name]').val()并不是必需的。
我们在Angular中将数据和变量绑定在一起,无论是javascript也好,view也罢,只要有改变,两者皆变。
为了演示数据绑定,我们需要获取表单的input来自动填充变量formData。让我们回到应用于页面的Angular控制器中。我们在过一下$scope和$http。
$scope:控制器和视图层之间的粘合剂。基本上,变量使用$scope从我们的控制器和视图层之间传递和往来。具体详细的定义,请参见文档。
$http:Angular服务来帮助我们处理POST请求。更多信息,请参见文档。
使用数据绑定获取变量
好了,闲话少说。我们将这些讨论应用到表单中去。方法比上面讨论的要简单。我们想Angular控制器和视图中分别添加一行。
<!-- index.html -->

...

<!-- PROCESS FORM WITH AJAX (NEW) -->
<script>

// define angular mole/app
var formApp = angular.mole('formApp', []);

// create angular controller and pass in $scope and $http
function formController($scope, $http) {

// create a blank object to hold our form information
// $scope will allow this to pass between controller and view
$scope.formData = {};

}

...

现在,我们已经建立了一个formData对象。让我们用表单数据来填充它。在显示调用每个输入和获得val()之前,我们用ng-model绑定一个特殊的输入到变量。

<!-- index.html -->

...

<!-- FORM -->
<form>
<!-- NAME -->
<div id="name-group" class="form-group">
<label>Name</label>
<input type="text" name="name" class="form-control" placeholder="Bruce Wayne" ng-model="formData.name">
<span class="help-block"></span>
</div>

<!-- SUPERHERO NAME -->
<div id="superhero-group" class="form-group">
<label>Superhero Alias</label>
<input type="text" name="superheroAlias" class="form-control" placeholder="Caped Crusader" ng-model="formData.superheroAlias">
<span class="help-block"></span>
</div>

<!-- SUBMIT BUTTON -->
<button type="submit" class="btn btn-success btn-lg btn-block">
<span class="glyphicon glyphicon-flash"></span> Submit!
</button>
</form>

<!-- SHOW DATA FROM INPUTS AS THEY ARE BEING TYPED -->
<pre>
{{ formData }}
</pre>

...

现在,既然Angular已经将每个输入绑到了formData。 当你输入每个输入框,你可以看到formData对象被填充了!有没有很酷!
你不必在view中使用$scope。一切被认为是嵌入到$scope中的。

处理表单
在我们的旧表单中,我们使用jQuery提交表单,像这样$('form').submit()。现在我们使用Angular称作ng-submit的特性。要想完成这个,我们需要添加一个控制器函数来处理表单,然后告诉我们form使用这个控制器函数:

<!-- index.html -->

...

<!-- PROCESS FORM WITH AJAX (NEW) -->
<script>

// define angular mole/app
var formApp = angular.mole('formApp', []);

// create angular controller and pass in $scope and $http
function formController($scope, $http) {

// create a blank object to hold our form information
// $scope will allow this to pass between controller and view
$scope.formData = {};

// process the form
$scope.processForm = function() {

};

}

...

<!-- FORM -->
<form ng-submit="processForm()">

...

现在我们的form知道提交时使用控制器函数了。既然已经到位了,然我们用$http来处理表单吧。
处理表单的语法看起来跟原始方式很像。好处是我们不需要手动抓取表单数据,或者注入,隐藏,添加类显示错误或成功信息。
<!-- index.html -->

...

// process the form
$scope.processForm = function() {
$http({
method : 'POST',
url : 'process.php',
data : $.param($scope.formData), // pass in data as strings
headers : { 'Content-Type': 'application/x-www-form-urlencoded' } // set the headers so angular passing info as form data (not request payload)
})
.success(function(data) {
console.log(data);

if (!data.success) {
// if not successful, bind errors to error variables
$scope.errorName = data.errors.name;
$scope.errorSuperhero = data.errors.superheroAlias;
} else {
// if successful, bind success message to message
$scope.message = data.message;
}
});
};

...

这就是我们的表单!没有添加或移除类。我们需要每次提交表单时都清楚错误。我们只需绑定变量和需要用到的视图。这非常棒,因为处理器用来处理数据,而视图用来显示数据.

jQuery POST vs Angular POST
有时能看到用POST方式提交在服务器中看不到数据,这是因为jQuery和Angular的序列化和发送数据的方式不同。这归结于你所使用的服务器语言和它理解Angular提交的数据的能力。
上面的代码是应用于PHP服务器的,jQuery对于$.param函数则是必需的。虽然实现上文中提到的内容有非常多不使用jQuery的方法,但在本实例中,使用jQuery的唯一原因就是,它更简单。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
长期胃胀怎么调理 魔渊之刃弓箭手攻略 弓箭手法盘装备发育攻略 妻妾迎新送死,倏恩倏爱,倏痛倏悲,缠绵不了是什么意思? 请学过美术或者动漫游戏设计的人回答我的问题。 画一个穿着和头型都相 ... ...和“我有一个可爱并且很淘气的女儿”用英文怎么说 “如果你叫我回答这个问题就是浪费时间,希望老师能找下一个学生”有英 ... 加勒比海盗拍了几部 《加勒比海盗5》第四部女主或回归 与开花同框 购买佳能相机开出的正式发票是佳能公司统一的发票还是各销售公司自己... ...我想早点上美国陪他,请问现在可以办旅游探亲证吗? angular1.x框架怎么用 对方只是在享受你的爱并不打算去爱你,我该怎么办呢? 如果爱是甘拜下风那我希望你是胜利者是什么意思? 如果爱是甘拜下风,那我不止为你跪一万次是什么颜色 因为喜欢所以棋逢对手因为爱你所以甘拜下风是什么意思? ,怎么回喜欢是棋逢对手,爱是甘拜下风? vivo手机怎样退出儿童模式? vivo手机怎么强制退出儿童模式 vivo手机怎么强制退出儿童模式? 为什么电脑坏蓝瓶? 如何退出vivo儿童模式 为什么我新买的笔记本电脑总是蓝屏自动重启 vivo y71a 怎么关闭儿童模式? 我新配的电脑为什么会蓝屏 新装的电脑,老是蓝屏 vivo儿童模式怎么关闭 0x000000e意味着什么,新组装的电脑经常蓝 新买的电脑玩起时突然就蓝屏是怎么回事重起又好了 我的新买的电脑为什么老是蓝屏 儿童模式如何解除vivo? angularjs ng-repeat 渲染完成后数据变化,可以再次渲染吗 将BootstrapJS和AngularJS结合使用以及为什么不用jQuery angular 下拉列表选项变的不表示 在Angular中如何实现下拉框模糊查询功能 我的qq邮箱能自动收到163邮箱转发过来的邮件,我想取消,怎么办?_百度... 如何用angularjs实现跨域数据传递 angularjs2中使用组件的时候,如何使用Material UI 里面的UI组件 angularjs,vue之类的框架如何实现可视化拖拽室组件开发,效率比手写高... angular 组件怎么传递参数给service angular4如何实现rsa加密? 如何使用angular与angular material实现一个瀑布流 angularjs 4 组件中的selector是干什么用的 在android设备中,使用adb命令提取文件,插入文件,提取系统日志的命令分别... 如何查询证书的注册单位? 怎么通过组织机构代码证查询营业执照号码 如何通过组织机构代码证查询企业注册地的工商局 组织机构代码查询在营业执照上吗 组织机构代码证怎样查询? 组织机构代码可以查到公司名称,机构名称无法查询到组织机构代码 的做法,白菜炖鱼怎么做好吃,白菜炖鱼的家常做法