Angular2.js實(shí)現(xiàn)表單驗(yàn)證詳解
表單創(chuàng)建一個(gè)有效、引人注目的數(shù)據(jù)輸入體驗(yàn)。Angular表單協(xié)調(diào)一組數(shù)據(jù)綁定控件,跟蹤變更。驗(yàn)證輸入的有效性,并且顯示錯(cuò)誤信息。
接下來(lái),主要內(nèi)容有:
1、使用組件和模板構(gòu)建Angular表單;
2、用ngModel創(chuàng)建數(shù)據(jù)綁定,以讀取和寫入輸入控件的值。
構(gòu)建Angular表單
我們想構(gòu)建包含姓名,電話,特長(zhǎng)三個(gè)字段的表單
1、我們可以參照快速啟動(dòng)那篇,創(chuàng)建一個(gè)名為forms的新項(xiàng)目,也可以使用之前的項(xiàng)目進(jìn)行修改;
2、創(chuàng)建Person類;
3、創(chuàng)建控制此表單的組件;
4、創(chuàng)建具有初始表單布局的模板;
5、使用ngModel雙向數(shù)據(jù)綁定語(yǔ)法把數(shù)據(jù)屬性綁定到每個(gè)表單控件中。
創(chuàng)建Person類
在app文件夾下創(chuàng)建hero.ts文件,內(nèi)容為
export class Person{
constructor(
public id:number,
public name:string,
public ownpower:string,
public power?:string //可填可不填,可選的 ?不能省略
){}
}
//創(chuàng)建一個(gè)類,定義它的屬性
TypeScript編譯器為每個(gè)public構(gòu)造函數(shù)參數(shù)生成一個(gè)公共字段,在創(chuàng)建一個(gè)新的Person實(shí)例時(shí),自動(dòng)把參數(shù)賦給這些公共字段。
創(chuàng)建表單組件
在app文件夾下創(chuàng)建hero-form-component.ts文件:
import { Component } from '@angular/core';
import {Person} from './hero'; //引入hero.ts中的Person類
@Component({
moduleId:module.id,//屬性設(shè)置了基地址,用于從相對(duì)路徑加載form.html模板文件
selector: 'hero-form',//在模板中創(chuàng)建添加<hero-form>標(biāo)簽
templateUrl:'../form.html'//模板上增加form.html里面的內(nèi)容
})
export class HeroFormComponent {
powers=['唱歌','跳舞','彈琴','畫畫'];
model=new Person(1,'小明','跳舞',this.powers[2]);//實(shí)例化
submitted=false;
onsubmit(){this.submitted=true;}
get diagnostic(){return JSON.stringify(this.model);} //這個(gè)先暫時(shí)不管
}
1、這段代碼導(dǎo)入了Angular核心庫(kù)以及我們剛剛創(chuàng)建的Person模型;
2、@Component裝飾器的選擇器將<hero-form>標(biāo)簽把這個(gè)表單放進(jìn)父模板;
3、moduleId:module.id屬性設(shè)置了基地址,用于從相對(duì)模塊路徑加載templateUrl;
4、templateUrl屬性指向一個(gè)獨(dú)立的HTML模板文件,使用外聯(lián)模板;
5、位model和powers提供了演示用的假數(shù)據(jù);
6、在最后增加diagnostic屬性,她返回這個(gè)模型的JSON形式。在開發(fā)過(guò)程中用于調(diào)試。
修改app.module.ts啟動(dòng)文件
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import {FormsModule} from '@angular/forms';//導(dǎo)入表單
import { AppComponent1 } from './app.component';
import{HeroFormComponent} from './hero-form.component';//導(dǎo)入新增加的組件類
//導(dǎo)入hero-form.component.ts中的HeroFormComponent
@NgModule({
imports: [
BrowserModule,
FormsModule //表單模板
],
declarations: [
AppComponent1 ,
HeroFormComponent //類名
],
bootstrap: [AppComponent1]
})
export class AppModule { }
1、導(dǎo)入FormsModule和新組件HeroFormComponent;
2、把FormModule添加到ngModel裝飾器的imports列表中,這樣應(yīng)用就能訪問(wèn)模板驅(qū)動(dòng)表單的所有特性,包括ngModel;
3、把HeroFormComponent添加到ngModule裝飾器的declarations列表中,使HeroFormComponent組件在整個(gè)模塊中可見。
修改app.component.ts文件
import { Component } from '@angular/core';
@Component({
selector: 'my-app',//在index.html中創(chuàng)建添加<my-app>標(biāo)簽
//包裹<hero-form></hero-form>
template:`<hero-form></hero-form>`
//模板里面添加此標(biāo)簽(hero-form里面的內(nèi)容)
})
export class AppComponent1{}
關(guān)于表單的組建模板構(gòu)建完了。
創(chuàng)建初始HTML表單模板,上文提到的form.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>form表單</title>
</head>
<body>
<div class="container">
<h1>個(gè)人信息</h1>
<form>
<div class="form-group">
<label for="name">姓名</label>
<input type="text" id="name" required class="form-control">
</div>
<div class="form-group">
<label for="ownpower">特長(zhǎng)</label>
<input type="text" class="form-control" id="ownpower">
</div>
<div class="form-group">
<label for="power">能力選擇</label>
<select class="form-control" id="power" required>
<!--循環(huán)-->
<option *ngFor="let pow of powers" [value]="pow">{{pow}}</option>
</select>
</div>
<button type="submit" class="btn btn-success">提交</button>
</form>
</div>
</body>
</html>
我們可以使用css來(lái)美化表單,在index.html里面引入樣式表文件
<!--樣式表--> <link rel="stylesheet" href="css/bootstrap.min.css">
顯示的效果為

使用ngModel進(jìn)行雙向數(shù)據(jù)綁定[(ngModel)]語(yǔ)法
修改form.html文件,拿姓名做個(gè)實(shí)例
<div class="form-group">
<label for="name">姓名,顯示為{{model.name}}</label>
<input type="text" id="name" required class="form-control" [(ngModel)]="model.name" name="name" #name1="ngModel">
<!--雙向綁定:{{model.name}}-->
<!--使用ngModwl進(jìn)行雙向綁定,其綁定了model.name,所以所有有model。name的都可以同時(shí)變化-->
</div>
效果為

好了,一個(gè)簡(jiǎn)單的表單就做好了,下一篇講控制表單,校驗(yàn)錯(cuò)誤等內(nèi)容。
參考:https://angular.cn/docs/ts/latest/guide/forms.html
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- AngularJS使用ngMessages進(jìn)行表單驗(yàn)證
- angular實(shí)現(xiàn)表單驗(yàn)證及提交功能
- AngularJS中實(shí)現(xiàn)用戶訪問(wèn)的身份認(rèn)證和表單驗(yàn)證功能
- 詳解AngularJS中的表單驗(yàn)證(推薦)
- AngularJS手動(dòng)表單驗(yàn)證
- 詳細(xì)解讀AngularJS中的表單驗(yàn)證編程
- AngularJS實(shí)現(xiàn)的獲取焦點(diǎn)及失去焦點(diǎn)時(shí)的表單驗(yàn)證功能示例
- 強(qiáng)大的 Angular 表單驗(yàn)證功能詳細(xì)介紹
- AngularJS 表單驗(yàn)證手機(jī)號(hào)的實(shí)例(非必填)
- Angular4表單驗(yàn)證代碼詳解
- AngularJS自定義表單驗(yàn)證功能實(shí)例詳解
相關(guān)文章
對(duì)angularJs中2種自定義服務(wù)的實(shí)例講解
今天小編就為大家分享一篇對(duì)angularJs中2種自定義服務(wù)的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
Angular中使用$watch監(jiān)聽object屬性值的變化(詳解)
下面小編就為大家?guī)?lái)一篇Angular中使用$watch監(jiān)聽object屬性值的變化(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04
angularjs手動(dòng)識(shí)別字符串中的換行符方法
今天小編就為大家分享一篇angularjs手動(dòng)識(shí)別字符串中的換行符方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
Angular2使用vscode斷點(diǎn)調(diào)試ts文件的方法
本篇文章主要介紹了Angular2使用vscode斷點(diǎn)調(diào)試ts文件的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
Angular?Component屬性綁定target和attr.target的區(qū)別分析
這篇文章主要介紹了Angular?Component屬性綁定target和attr.target的區(qū)別分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
詳解angular路由高亮之RouterLinkActive
這篇文章主要介紹了詳解angular路由高亮之RouterLinkActive,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04

