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 相关文章推荐
在textarea中屏蔽js的某个function的javascript代码
Apr 20 Javascript
jquery怎样实现ajax联动框(二)
Mar 08 Javascript
javascript loadScript异步加载脚本示例讲解
Nov 14 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
Feb 24 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
Oct 17 Javascript
JavaScript+html5 canvas制作的百花齐放效果完整实例
Jan 26 Javascript
学习使用jquery iScroll.js移动端滚动条插件
Mar 24 Javascript
js不间断滚动的简单实现
Jun 03 Javascript
js实现点击图片自动提交action的简单方法
Oct 16 Javascript
vue、react等单页面项目应该这样子部署到服务器
Jan 03 Javascript
Three.js实现3D机房效果
Dec 30 Javascript
JavaScrip如果基于url实现图片下载
Jul 03 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 魔术函数使用说明
2010/02/21 PHP
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
joomla数据库操作示例代码
2016/01/06 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
php 魔术常量详解及实例代码
2016/12/04 PHP
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
jquery跟随屏幕滚动效果的实现代码
2016/04/13 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
跨域解决之JSONP和CORS的详细介绍
2018/11/21 Javascript
微信小程序实现点击图片旋转180度并且弹出下拉列表
2018/11/27 Javascript
详解关于微信setData回调函数中的坑
2019/02/18 Javascript
Javascript读取上传文件内容/类型/字节数
2019/04/30 Javascript
layui添加动态菜单与选项卡
2019/07/26 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
Numpy中对向量、矩阵的使用详解
2019/10/29 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
Python学习之路之pycharm的第一个项目搭建过程
2020/06/18 Python
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
美国修容界大佬创建的个人美妆品牌:Kevyn Aucoin Beauty
2018/12/12 全球购物
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
酒吧员工的岗位职责
2013/11/26 职场文书
机电一体化自荐信
2013/12/10 职场文书
运动会通讯稿200字
2014/02/16 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
SQL中的三种去重方法小结
2021/11/01 SQL Server
SQL bool盲注和时间盲注详解
2022/07/23 SQL Server