?
This document uses PHP Chinese website manual Release
指令會(huì)實(shí)例化 FormController。
如果聲明了 name
屬性,表單控制器會(huì)被發(fā)布到name對(duì)應(yīng)的作用域下。
ngForm
Angular中的表單能夠嵌套。 意思是當(dāng)所有子表單有效時(shí)外部表單也會(huì)有效。然而,瀏覽器不允許 <form>
元素嵌套,所以Angular提供了 ngForm
指令來實(shí)現(xiàn) <form>
相同的行為,并能進(jìn)行嵌套。嵌套表單讓你在使用 ngRepeat
指令動(dòng)態(tài)生成的表單上使用Angula的校驗(yàn)指令時(shí)更方便。在此以前,由于使用修改方式不能動(dòng)態(tài)生成輸入元素的 name
屬性,你必須使用 ngForm
指令包裹重復(fù)生成的集合中的每個(gè)輸入對(duì)象,再在外部嵌套 form
元素。
ng-valid
表單通過驗(yàn)證時(shí)設(shè)置ng-invalid
表單未通過驗(yàn)證時(shí)設(shè)置ng-pristine
表單沒有改動(dòng)時(shí)設(shè)置ng-dirty
表單有改動(dòng)時(shí)設(shè)置記住 ngAnimate 能偵測這些類中每個(gè)的添加和刪除。
在富客戶端式Angular應(yīng)用中的表單身份不同于在以往的循環(huán)鏈?zhǔn)綉?yīng)用中的身份。為防止瀏覽器在發(fā)送數(shù)據(jù)到服務(wù)器時(shí)不會(huì)由于表單提交引起整個(gè)頁面重載,所以在應(yīng)用中通過特殊手段觸發(fā)javascript邏輯來處理表單提交。
為此,Angular防止默認(rèn)操作(表單提交到服務(wù)器),除非 <form>
元素指定了 action
屬性.
你可以使用以下兩種方法之一來指定表單提交時(shí)要調(diào)用的javascript方法:
為了防止處理程序的雙重執(zhí)行,你只能使用 ngSubmit 或 ngClick 指令的其中一個(gè)。這是因?yàn)镠TML規(guī)范有以下表單提交規(guī)則:
ngSubmit
)ngClick
) 和 整個(gè)表單的submit事件 (ngSubmit
)當(dāng)整個(gè)表單提交時(shí),任何掛起的 ngModelOptions
更改將立即生效。注意, ngClick
事件將在模型被更新前觸發(fā)??梢允褂?ngSubmit
訪問更新的模型。
<form
[name=""]>
...
</form>
參數(shù) | 類型 | 詳述 |
---|---|---|
name (可選)
|
string |
表單名稱。如果指定,表單控制器將被發(fā)布到這個(gè)名字下相關(guān)的域范圍中。 動(dòng)畫鉤子ngForm中的動(dòng)畫將在任何級(jí)聯(lián)CSS類被添加或刪除時(shí)觸發(fā)。這此類有: 下面的例子簡單的演示了一個(gè)利用 CSS 樣式過渡來渲染一個(gè)驗(yàn)證時(shí)未通過驗(yàn)證的表單元素: //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');});