1、要使用Angular自带的表单控制需要先引入相关模块(.ts文件):

  1. import { FormGroup, //表单对象类
           FormBuilder, //表单生成工具类
           Validators} //表单验证类
    from "@angular/forms";

2、然后定义一个FormGroup对象,并且对它进行初始化(.ts文件):

  1. public advForm: FormGroup;
  1. this.advForm = this.formBuilder.group({
  2. selAdvertiser:[''],
  3. disAdvertiser:[''],
  4. adv_cont_title:[''],
  5. adv_cont_name:[''],
  6. adv_email: ['', Validators.pattern("^([A-Za-z0-9!#\$%&'\*\+=\?\^_`\{\|\}~-]+[\.]?)+@([A-Za-z0-9]+[\.])+[A-Za-z]{2,4}$")],
  7. adv_tel: ['', Validators.pattern('[^A-Za-z]+$')],
  8. adv_fax: ['', Validators.pattern('[^A-Za-z]+$')],//使用正则表达式进行校验
  9. proposal_num:[''],
  10. contract_num:[''],
  11. proposal_ver:[''],
  12. contract_ver:[''],
  13. package_name:[''],
  14. description:[''],
  15. deadline:[''],
  16. period:[''],
  17. agt_letter:[''],
  18. credit_ass:['']
  19. });

3、在模版页面使用后台已定义并初始化好的表单对象:

  1. <div id="DocumentPanel" class="panel-collapse collapse in show" [formGroup]="advForm">
  2. ...
  3. <div class="form_group_col">
  4. <div><label class="ars-form-label">
  5. <input type="checkbox" [disabled]="!edit_mode" class="form-checkbox" value="Y"
  6. formControlName="agt_letter" />Agency
  7. Appointment Letter</label>
  8. </div>
  9. </div>
  10. ...
  11. </div>

可以看到上面的例子,外层的<div>使用了表单formGroup对象advForm,内部的<input>元素使用formControlName="agt_letter"来表明这个表单元素是对象FormGroup对象中的advForm(advForm实际上是FormController对象,只是上面使用了FormBuilder自动生成了)。

4、在模版页面使用表单验证的方法:

  1. <div class="">
  2. <div class="error-message" *ngIf="agtForm.controls['agt_email'].invalid">must be Email Format.</div>
  3. <div class="input-group-append">
  4. <input type="text" class="form-control" id="agt_email" name="agt_email" formControlName="agt_email" />
  5. </div>
  6. </div>

留意上面例子,例子中是以FormGroup.controls['XXX'].invalid这样的语法来获取校验值的,如果该表单元素的内容符合校验,返回true,否则返回false。

5、表单元素取值、设值和控制其是否可编辑的方法:

  1. //取值
  2. this.proposalContract.advertiserId = this.advForm.get("selAdvertiser").value
  3.  
  4. //设值
  5. this.advForm.get("disAdvertiser").setValue(this.advCon.company_name);
  6.  
  7. //设为可编辑/可用
  8. this.advForm.get("selAdvertiser").enable();
  9.  
  10. //设为不可编辑/可用
  11. this.advForm.get("selAdvertiser").disable();

Angular2+之使用FormGroup、FormBuilder和Validators对象控制表单(取值、赋值、校验和是否可编辑等)的更多相关文章

  1. Django---CBV和FBV的使用,CBV的流程,给视图加装饰器,Request对象方法,属性和Response对象,form表单的上传

    Django---CBV和FBV的使用,CBV的流程,给视图加装饰器,Request请求对象方法,属性和Response响应对象,form表单的上传 一丶CBV和FBV       在Django中存 ...

  2. 将任意一个jQuery对象进行表单序列化,免除了提交请求时大量拼写表单数据的烦恼,支持键值对<name&value>格式和JSON格式。

    http://zhengxinlong.iteye.com/blog/848712 将任意一个jQuery对象进行表单序列化,免除了提交请求时大量拼写表单数据的烦恼,支持键值对<name& ...

  3. javascript对象转换,动态属性取值

    $(document).ready(function(){ var exceptionMsg = '${exception.message }'; var exceptionstr = ''; //j ...

  4. jsp学习与提高(二)——JSP 隐式对象、表单处理及过滤器

    1.JSP 隐式对象 JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明.JSP隐式对象也被称为预定义变量. JSP所支持的九大隐式对象: 对象 描述 req ...

  5. TypeScript 中限制对象键名的取值范围

    当我们使用 TypeScript 时,我们想利用它提供的类型系统限制代码的方方面面,对象的键值,也不例外. 譬如我们有个对象存储每个年级的人名,类型大概长这样: type Students = Rec ...

  6. 页面间(窗口间)的取值赋值及获取iframe下的window对象

    ①同一个窗口中,获取某个iframe的信息 <body> <iframe id="PAID" name="PA" src="Item ...

  7. JS中JSON对象的定义和取值

    1.JSON(JavaScript Object Notation)一种简单的数据格式,比xml更轻巧.JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任 ...

  8. 如果没有<form>标签,也没有enctype="multipart/form-data"属性,怎么使用formData对象提交表单呢?如下方式

    form标签的enctype属性 enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码. 默认地,表单数据会编码为 "application/x-www-form-urlen ...

  9. (文章也有问题,请自行跳过)react中的状态机每次setState都是重新创建新的对象,如需取值,应该在render中处理。

    demo如下 class Demo4StateLearn extends React.Component { constructor(props) { super(props); this.state ...

随机推荐

  1. CCPC 网络赛

    array 做法 比赛中的表现..... 已经无法言语形容了. 题意是,查询前缀中大于某个数字的 mex,在线. 一下把问题转化为偏序问题.... 带修主席树?????这下好,直接一箭穿心,武将被移除 ...

  2. 模板汇总——ST(暂)

    int Log[N]; struct ST { ], a[N]; void init(int n) { ]=-); i < N; i++) Log[i] = Log[i - ] + ((i &a ...

  3. box-sizing(CSS3)

    CSS3新增了盒模型box-sizing,属性值有下面三个: content-box 默认值,让元素维持W3C的标准盒模型.元素的宽度/高度(width/height)= 元素内容框宽度/高度(con ...

  4. fastjson对象,JSON,字符串,map之间的互转

    1.对象与字符串之间的互转 将对象转换成为字符串 String str = JSON.toJSONString(infoDo); 字符串转换成为对象 InfoDo infoDo = JSON.pars ...

  5. jumper-server-资源管理

    https://cloud.tencent.com/developer/article/1460469 此链接是百度搜索的 , 比较详细 https://www.cnblogs.com/zsl-fin ...

  6. react navigation goBack()返回到任意页面(不集成redux) 二

    实现思路: A -- > B (获取A的key值,传至C)-- >C(获取B传来的A页面key值,传至D) -- >D(获取C传来的A页面key值&C页面的key值,传至下一 ...

  7. SpringBoot 2.0 + InfluxDB+ Sentinel 实时监控数据存储

    前言 阿里巴巴提供的控制台只是用于演示 Sentinel 的基本能力和工作流程,并没有依赖生产环境中所必需的组件,比如持久化的后端数据库.可靠的配置中心等.目前 Sentinel 采用内存态的方式存储 ...

  8. jenkins离线安装插件的方法(无法访问外网)

    最近项目要迁移环境,无法访问外网,因此jenkins的安装配置需要离线操作,在此记录 jenkins下载安装好之后,跳过插件的安装,新建用户进入jenkins界面,这些前置步骤我在之前的随笔里有写具体 ...

  9. 前端面试题——html与css基础篇

    整理一波html和css的面试题,侧重基础,希望明天面试能用到~(╥╯^╰╥) 一.HTML部分 1.浏览器页面有哪三层构成,分别是什么,作用是什么? 构成:结构层.表示层.行为层分别是:HTML.C ...

  10. [python]OS文件系统

    1.getcwdd() 获得应用程序当前的工作目录 #getcwd() 获取应用程序当前的工作目录 import os print(os.getcwd()) 2.chdir(path) 改变当前工作目 ...