Angular2.js实现表单验证详解


Posted in Javascript onJune 23, 2017

表单创建一个有效、引人注目的数据输入体验。Angular表单协调一组数据绑定控件,跟踪变更。验证输入的有效性,并且显示错误信息。

接下来,主要内容有:

1、使用组件和模板构建Angular表单;

2、用ngModel创建数据绑定,以读取和写入输入控件的值。

构建Angular表单

我们想构建包含姓名,电话,特长三个字段的表单

1、我们可以参照快速启动那篇,创建一个名为forms的新项目,也可以使用之前的项目进行修改;

2、创建Person类;

3、创建控制此表单的组件;

4、创建具有初始表单布局的模板;

5、使用ngModel双向数据绑定语法把数据属性绑定到每个表单控件中。

创建Person类

在app文件夹下创建hero.ts文件,内容为

export class Person{
  constructor(
    public id:number,
    public name:string,
    public ownpower:string,
    public power?:string //可填可不填,可选的 ?不能省略
  ){}
}
//创建一个类,定义它的属性

TypeScript编译器为每个public构造函数参数生成一个公共字段,在创建一个新的Person实例时,自动把参数赋给这些公共字段。

创建表单组件

在app文件夹下创建hero-form-component.ts文件:

import { Component } from '@angular/core';
import {Person} from './hero'; //引入hero.ts中的Person类
@Component({
  moduleId:module.id,//属性设置了基地址,用于从相对路径加载form.html模板文件
  selector: 'hero-form',//在模板中创建添加<hero-form>标签
  templateUrl:'../form.html'//模板上增加form.html里面的内容
})
export class HeroFormComponent {
  powers=['唱歌','跳舞','弹琴','画画'];
  model=new Person(1,'小明','跳舞',this.powers[2]);//实例化
  submitted=false;
  onsubmit(){this.submitted=true;}
  get diagnostic(){return JSON.stringify(this.model);} //这个先暂时不管
}

1、这段代码导入了Angular核心库以及我们刚刚创建的Person模型;

2、@Component装饰器的选择器将<hero-form>标签把这个表单放进父模板;

3、moduleId:module.id属性设置了基地址,用于从相对模块路径加载templateUrl;

4、templateUrl属性指向一个独立的HTML模板文件,使用外联模板;

5、位model和powers提供了演示用的假数据;

6、在最后增加diagnostic属性,她返回这个模型的JSON形式。在开发过程中用于调试。

修改app.module.ts启动文件

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import {FormsModule} from '@angular/forms';//导入表单
import { AppComponent1 } from './app.component';
import{HeroFormComponent} from './hero-form.component';//导入新增加的组件类
//导入hero-form.component.ts中的HeroFormComponent
@NgModule({
imports: [
  BrowserModule,
  FormsModule //表单模板
],
declarations: [
  AppComponent1 ,
  HeroFormComponent //类名
],
bootstrap: [AppComponent1]
})
export class AppModule { }

1、导入FormsModule和新组件HeroFormComponent;

2、把FormModule添加到ngModel装饰器的imports列表中,这样应用就能访问模板驱动表单的所有特性,包括ngModel;

3、把HeroFormComponent添加到ngModule装饰器的declarations列表中,使HeroFormComponent组件在整个模块中可见。

修改app.component.ts文件

import { Component } from '@angular/core';
@Component({
  selector: 'my-app',//在index.html中创建添加<my-app>标签
  //包裹<hero-form></hero-form>
  template:`<hero-form></hero-form>`
  //模板里面添加此标签(hero-form里面的内容)
})
export class AppComponent1{}

关于表单的组建模板构建完了。

创建初始HTML表单模板,上文提到的form.html文件

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>form表单</title>
</head>
<body>
<div class="container">
  <h1>个人信息</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">特长</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>
        <!--循环-->
        <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来美化表单,在index.html里面引入样式表文件

<!--样式表-->
  <link rel="stylesheet" href="css/bootstrap.min.css">

显示的效果为

Angular2.js实现表单验证详解

使用ngModel进行双向数据绑定[(ngModel)]语法

修改form.html文件,拿姓名做个实例

<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进行双向绑定,其绑定了model.name,所以所有有model。name的都可以同时变化-->
    </div>

效果为

Angular2.js实现表单验证详解

 好了,一个简单的表单就做好了,下一篇讲控制表单,校验错误等内容。

参考:https://angular.cn/docs/ts/latest/guide/forms.html

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery基本选择器选择元素使用介绍
Apr 18 Javascript
javascript移动设备Web开发中对touch事件的封装实例
Jun 05 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
Apr 01 Javascript
详解jquery事件delegate()的使用方法
Jan 25 Javascript
JavaScript正则表达式的分组匹配详解
Feb 13 Javascript
基于jQuery实现文字打印动态效果
Apr 21 jQuery
js编写简单的计时器功能
Jul 15 Javascript
Element input树型下拉框的实现代码
Dec 21 Javascript
jQuery实现html可联动的百分比进度条
Mar 26 jQuery
vue内置组件component--通过is属性动态渲染组件操作
Jul 28 Javascript
如何编写一个 Webpack Loader的实现
Oct 18 Javascript
JavaScript async/await原理及实例解析
Dec 02 Javascript
JS实现多张图片预览同步上传功能
Jun 23 #Javascript
Vue组件化通讯的实例代码
Jun 23 #Javascript
JavaScript字符串检索字符的方法
Jun 23 #Javascript
Angular2 组件通信的实例代码
Jun 23 #Javascript
js实现文字列表无缝滚动效果
Jun 23 #Javascript
jquery图片放大镜效果
Jun 23 #jQuery
Avalonjs双向数据绑定与监听的实例代码
Jun 23 #Javascript
You might like
PHP开发过程中常用函数收藏
2009/12/14 PHP
Win下如何安装PHP的APC拓展
2013/08/07 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
php在apache环境下实现gzip配置方法
2015/04/02 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
PHP简单读取xml文件的方法示例
2017/04/20 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
云网广告中的代码,提示出错,大家找找
2006/11/21 Javascript
记录几个javascript有关的小细节
2007/04/02 Javascript
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
动态标签 悬停效果 延迟加载示例代码
2013/11/21 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
理解javascript封装
2016/02/23 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
自定义vue组件发布到npm的方法
2018/05/09 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
2019/01/29 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
Web服务器框架 Tornado简介
2014/07/16 Python
Python中偏函数用法示例
2018/06/07 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
python内存动态分配过程详解
2019/07/15 Python
基于python实现操作redis及消息队列
2020/08/27 Python
新西兰最大的连锁超市:Countdown
2020/06/04 全球购物
PHP如何去执行一个SQL语句
2016/03/05 面试题
函授本科自我鉴定
2014/02/04 职场文书
中专自我鉴定
2014/02/05 职场文书
《会走路的树》教后反思
2014/04/19 职场文书
小班幼儿评语大全
2014/04/30 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
2014校长四风问题对照检查材料思想汇报
2014/09/16 职场文书
2014年国庆节寄语
2014/09/19 职场文书
教师党员先进性教育自我剖析材料思想汇报
2014/09/24 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
2016年优秀党务工作者先进事迹材料
2016/02/29 职场文书
Debian11 Xfce终端光标的颜色怎么设置?
2022/08/14 数码科技