6.1 NgForm 表单指令 - RLwu/angular-start GitHub Wiki
NgForm指令为表单元素/form建立一个控件组对象,作为控件的容器; 而NgControlName指令为则为宿主input元素建立一个控件对象,并将该控件加入到NgForm 指令建立的控件组中:
局部变量
通过使用#符号,我们创建了一个引用控件组对象(注意,不是form元素!)的局部变量f。 这个变量最大的作用是:它的value属性是一个简单的JSON对象,键对应于input元素的 ng-control属性,值对应于input元素的值:
声明指令依赖
NgForm指令和NgControlName指令都包含在预定义的数组变量FORM_DIRECTIVES中,所以我们在 组件注解的directives属性中直接声明FORM_DIRECTIVES就可以在模板中直接使用这些指令了:
//angular2/src/common/forms/directives.ts
export const FORM_DIRECTIVES: Type[] = CONST_EXPR([
NgControlName,
NgControlGroup,
NgFormControl,
NgModel,
NgFormModel,
NgForm,
NgSelectOption,
DefaultValueAccessor,
NumberValueAccessor,
CheckboxControlValueAccessor,
SelectControlValueAccessor,
NgControlStatus,
RequiredValidator,
MinLengthValidator,
MaxLengthValidator
]);
- html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>NgForm</title>
</head>
<body>
<ez-app><img src="img/wait.gif"></ez-app>
<script type="text/javascript" src="lib/angular2.beta.stack.min.js"></script>
</body>
</html>
- ts
import {Component} from "angular2/core";
import {bootstrap} from "angular2/platform/browser";
import {CORE_DIRECTIVES,FORM_DIRECTIVES} from "angular2/common";
//EzApp组件
@Component({
selector:"ez-app",
directives:[FORM_DIRECTIVES,CORE_DIRECTIVES],
template:`
<form #f="ngForm" (submit)="search(f.value)">
<select>
<option value="web">网页</option>
<option value="news">新闻</option>
<option value="image">图片</option>
</select>
<input type="text" ngControl="kw">
<button type="submit">搜索</button>
</form>
<!--给个简单的反馈-->
<h1 *ngIf="kw!=''">正在搜索 {{kw}} ...</h1>
`,
styles:[`form{background:#90a4ae;padding:5px;}`]
})
class EzApp{
constructor(){
this.kw = "";
}
search(val){
this.kw = val.kw;
//假装在搜索,2秒钟返回
setTimeout(()=>this.kw="",2000);
}
}
bootstrap(EzApp);