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 相关文章推荐
javascript 复杂的嵌套环境中输出单引号和双引号
May 26 Javascript
js中更短的 Array 类型转换
Oct 30 Javascript
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
Oct 12 Javascript
高效率JavaScript编写技巧整理
Aug 23 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
Dec 19 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
Jan 09 Javascript
JS循环遍历JSON数据的方法
Jul 08 Javascript
浅谈jQuery中的checkbox问题
Aug 10 Javascript
DOM操作原生js 的bug,使用jQuery 可以消除的解决方法
Sep 04 Javascript
ReactNative-JS 调用原生方法实例代码
Oct 08 Javascript
Angular中管道操作符(|)的使用方法
Dec 15 Javascript
JS实现仿微信支付弹窗功能
Jun 25 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聊天室技术
2006/10/09 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
2016/03/23 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
JavaScript中把数字转换为字符串的程序代码
2013/06/19 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
JavaScript箭头(arrow)函数详解
2017/06/04 Javascript
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
Vue组件库发布到npm详解
2018/02/17 Javascript
IE11下处理Promise及Vue的单项数据流问题
2019/07/24 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
在Python中marshal对象序列化的相关知识
2015/07/01 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
python单线程下实现多个socket并发过程详解
2019/07/27 Python
Python模块汇总(常用第三方库)
2019/10/07 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
python 将视频 通过视频帧转换成时间实例
2020/04/23 Python
Python类super()及私有属性原理解析
2020/06/15 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
2020/09/03 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
canvas小画板之平滑曲线的实现
2020/08/12 HTML / CSS
英国电子专家:maplin
2019/09/04 全球购物
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
宿舍使用违章电器检讨书
2014/01/12 职场文书
会计师职业生涯规划范文
2014/02/18 职场文书
煤矿安全演讲稿
2014/05/09 职场文书
北京申奥口号
2014/06/19 职场文书
抗震救灾标语
2014/06/26 职场文书
原生Js 实现的简单无缝滚动轮播图的示例代码
2021/05/10 Javascript
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记
Python正则表达式中flags参数的实例详解
2022/04/01 Python