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

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

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

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

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

<div id="DocumentPanel" class="panel-collapse collapse in show" [formGroup]="advForm">
...
<div class="form_group_col">
<div><label class="ars-form-label">
<input type="checkbox" [disabled]="!edit_mode" class="form-checkbox" value="Y"
formControlName="agt_letter" />Agency
Appointment Letter</label>
</div>
</div>
...
</div>

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

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

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

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

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

//取值
this.proposalContract.advertiserId = this.advForm.get("selAdvertiser").value //设值
this.advForm.get("disAdvertiser").setValue(this.advCon.company_name); //设为可编辑/可用
this.advForm.get("selAdvertiser").enable(); //设为不可编辑/可用
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. 手把手教你用深度学习做物体检测(七):YOLOv3介绍

    YOLOv3 论文:< YOLOv3: An Incremental Improvement > 地址: https://arxiv.org/pdf/1804.02767.pdfyolov ...

  2. Team Train Recorder

    2014-2015 Petrozavodsk Winter Training Camp, Contest.58 (Makoto rng_58 Soejima contest) contest link ...

  3. HDU-4027-Can you answer these queries?线段树+区间根号+剪枝

    传送门Can you answer these queries? 题意:线段树,只是区间修改变成 把每个点的值开根号: 思路:对[X,Y]的值开根号,由于最大为 263.可以观察到最多开根号7次即为1 ...

  4. 杭电2018暑假多校第一场 D Distinct Values hdu6301 贪心

    Distinct Values Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  5. yzoj P2343 & 洛谷 P1437 [HNOI2004]敲砖块

    题意 在一个凹槽中放置了N层砖块,最上面的一层油N块砖,从上到下每层一次减少一块砖.每块砖都有一个分值,敲掉这块砖就能得到相应的分值,如图所示. 如果你想敲掉第i层的第j块砖的话,若i=1,你可以直接 ...

  6. Python---列表的学习(一)

    本文将介绍列表和列表的使用: 我对列表的理解是和c,c++中的数组,vector,数据结构-链表-栈-队列,都很相似,因此列表很强大(相对于c,c++来说),所以在python的学习中列表是个重点. ...

  7. 【Offer】[51] 【数组中的逆序对】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数.例如,在数组 ...

  8. SQL,如果碰到Json,你会怎么做?

    1.Json串如下: DECLARE @JsonInfo NVARCHAR() SET @JsonInfo=N' { "CalcPayInput":{ ", " ...

  9. 爬虫 之 requests

    Requests 安装pip install requests 官方设计原则:让HTTP服务于人类 一.常用方法 import requests url = "http://www.http ...

  10. Python 为了提升性能,竟运用了共享经济

    大家或许知道,Python 为了提高内存的利用效率,采用了一套共用对象内存的分配策略. 例如,对于那些数值较小的数字对象([-5, 256]).布尔值对象.None 对象.较短的字符串对象(通常 是 ...