©
This document uses PHP Chinese website manual Release
指令会实例化 FormController。
如果声明了 name
属性,表单控制器会被发布到name对应的作用域下。
ngForm
Angular中的表单能够嵌套。 意思是当所有子表单有效时外部表单也会有效。然而,浏览器不允许 <form>
元素嵌套,所以Angular提供了 ngForm
指令来实现 <form>
相同的行为,并能进行嵌套。嵌套表单让你在使用 ngRepeat
指令动态生成的表单上使用Angula的校验指令时更方便。在此以前,由于使用修改方式不能动态生成输入元素的 name
属性,你必须使用 ngForm
指令包裹重复生成的集合中的每个输入对象,再在外部嵌套 form
元素。
ng-valid
表单通过验证时设置ng-invalid
表单未通过验证时设置ng-pristine
表单没有改动时设置ng-dirty
表单有改动时设置记住 ngAnimate 能侦测这些类中每个的添加和删除。
在富客户端式Angular应用中的表单身份不同于在以往的循环链式应用中的身份。为防止浏览器在发送数据到服务器时不会由于表单提交引起整个页面重载,所以在应用中通过特殊手段触发javascript逻辑来处理表单提交。
为此,Angular防止默认操作(表单提交到服务器),除非 <form>
元素指定了 action
属性.
你可以使用以下两种方法之一来指定表单提交时要调用的javascript方法:
为了防止处理程序的双重执行,你只能使用 ngSubmit 或 ngClick 指令的其中一个。这是因为HTML规范有以下表单提交规则:
ngSubmit
)ngClick
) 和 整个表单的submit事件 (ngSubmit
)当整个表单提交时,任何挂起的 ngModelOptions
更改将立即生效。注意, ngClick
事件将在模型被更新前触发。可以使用 ngSubmit
访问更新的模型。
<form
[name=""]>
...
</form>
参数 | 类型 | 详述 |
---|---|---|
name (可选)
|
string |
表单名称。如果指定,表单控制器将被发布到这个名字下相关的域范围中。 动画钩子ngForm中的动画将在任何级联CSS类被添加或删除时触发。这此类有: 下面的例子简单的演示了一个利用 CSS 样式过渡来渲染一个验证时未通过验证的表单元素: //be sure to include ngAnimate as a module to hook into more //advanced animations .my-form { transition:0.5s linear all; background: white; } .my-form.ng-invalid { background: red; color:white; } |
<script>
angular.module('formExample', [])
.controller('FormController', ['$scope', Function($scope) {
$scope.userType = 'guest';
}]);
</script>
<style>
.my-form {
-webkit-transition:all linear 0.5s;
transition:all linear 0.5s;
background: transparent;
}
.my-form.ng-invalid {
background: red;
}
</style>
<form name="myForm" ng-controller="FormController" class="my-form">
userType: <input name="input" ng-model="userType" required>
<span class="error" ng-show="myForm.input.$error.required">Required!</span><br>
<tt>userType = {{userType}}</tt><br>
<tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br>
<tt>myForm.input.$error = {{myForm.input.$error}}</tt><br>
<tt>myForm.$valid = {{myForm.$valid}}</tt><br>
<tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>
</form>
protractor.jsit('should initialize to model', Function() {
var userType = element(by.binding('userType'));
var valid = element(by.binding('myForm.input.$valid'));
expect(userType.getText()).toContain('guest');
expect(valid.getText()).toContain('true');});
it('should be invalid if empty', Function() {
var userType = element(by.binding('userType'));
var valid = element(by.binding('myForm.input.$valid'));
var userInput = element(by.model('userType'));
userInput.clear();
userInput.sendKeys('');
expect(userType.getText()).toEqual('userType =');
expect(valid.getText()).toContain('false');});