ng4中,有两种方式去声明一个表单

一:Template-Driven Forms - 模板驱动式表单   [引入FormsModule]

1.ngForm赋值[可以方便的获取表单的值]

name='username'

[(ngModel)]='login.username'

required>

Name is required.

2.ngModel绑定[ngModel会自动关联表单控件name属性,并使用该值作为ngForm对象的属性名]

以下有三种写法:

3.ngModel赋值[可以操纵表单控件的事件]

name='username'

[(ngModel)]='login.username'

#username='ngModel'(change)='changeName(username.value)'required>

Name is required.

4.验证规则相关[required/minlength/maxlength等]

The minlength is8.

5.验证状态相关[touched/valid/invalid/pristine/dirty/untouched等]

valid:控件有效

invalid:控件无效

pristine:控件值未改变

dirty:控件值已改变

untouched:表单控件未被访问过

...

[disabled]='f.invalid'

(click)='onSubmit(f)'>

submit

二:Reactive Forms (Model-Driven Forms) - 响应式表单  [引入ReactiveFormsModule]

1.FormGroup(FormControl+FormArray)[表单对象]

FormGroup:包含一组FormControl和FormArray的实例,可用于跟踪一组实例的值和验证状态

FormControl & FormArray:为单个表单控件提供支持的类,用于跟踪控件的值和验证状态 前者是单值类型,后者是多值类型

2.Validators[表单验证]

//html方面

*ngIf="thatForm.get('name').hasError('required') &&

thatForm.get('name').touched">

Name is required

*ngIf="thatForm.get('name').hasError('minlength') &&

thatForm.get('name').touched">

The minlength is 2.

//xx.component.ts

export class xxComponent implements OnInit{

thatForm: FormGroup;

constructor(){};

ngOnInit() { this.thatForm=new FormGroup({

name:new FormGroup('',[Validators.required,Validators.minLength(2)])

})

}

}

3.FormBuilder[简化新建FormGroup对象整个过程]

//FormGroup用法

export class xxComponent implements OnInit{

thatForm: FormGroup;

constructor(){};

ngOnInit() {this.thatForm=new FormGroup({ name:new FormGroup('',[Validators.required,Validators.minLength(2)])

})

}

}

//FormBuilder用法

export class xxComponent implements OnInit{

thatForm: FormGroup;

constructor(private formBuilder: FormBuilder){};

ngOnInit() {this.thatForm=this.formBuilder.group({

name:['',[Validator.required,Validators.minLength(2)]]

})

}

}

4.FormValidation[统一管理验证错误]

//html方面

{{formValidation.msgs.name.errors}}

//form-validation.ts

export class xxValidation extends FormValidation{

constructor(){

super()

}

msgs={

name:{

errors:'',

messages:{

required:'please type the name.',

minlength:'please enter 3 charactors atleast.'}

}

}

}

//xx.component.ts

export class xxComponent implements OnInit{

formValidation:xxValidation=newxxValidation();

thatForm:FormGroup;

constructor(private formBuilder: FormBuilder){}

ngOnInit(){ this.thatForm=this.formBuilder.group({

name:['',[Validators.required,Validators.minLength(4)]]

})

}

}

两种方式的比较:

模板驱动表单(Template-Driven Forms)

1.使用方便

2.适用于简单的场景

3.通过[(ngModel)]实现数据双向绑定

4.最小化组件类的代码

5.不利于单元测试

响应式表单(Reactive Forms)

1.比较灵活

2.适用于复杂的场景

3.简化了HTML模板的代码,把验证逻辑抽离出来了

4.方便跟踪表单控件值的变化

5.易于单元测试

angular4更改表单中显示的值_angular4 Form表单相关相关推荐

  1. angular4更改表单中显示的值_Angular 4 动态表单教程 Reactive Forms教程

    动态表单(React Forms)是一种动态构建表单的技术,用于解决有时候手动编写和维护表单所需工作量和时间会过大的问题.特别是在需要编写大量表单时.表单都很相似,而且随着业务和监管需求的迅速变化,表 ...

  2. angular4更改表单中显示的值_关于angular4中FormBuilder重新赋值时发生的问题

    代码如图 constructor(public fb: FormBuilder) { this.formModel = this.fb.group({ leader_id: [''] }); this ...

  3. html表单怎么变量,在html表单中显示变量的内容(javascript)

    我在做一个带有Javascript的程序.我必须在这个程序中做一些操作,最后,我必须在表单中显示结果.在html表单中显示变量的内容(javascript) 我该怎么办?我认为也许我必须在" ...

  4. JSP 第一天:提交表单--获取表单中的数据值

    主要用到两个内置的对象:out  和 request out:用来在小脚本里面输出显示内容 request:用来获取用户提交的信息(包括:用户的IP,表单中的内容等) [java] view plai ...

  5. 重置form表单中的input值

    话不多说,直接上代码,看不懂的,你也可以私聊(这也看不懂,我也很惆怅啊) $(':input','#addMenuModal') //'#addMenuModal'为form表单id值 .not(': ...

  6. 查看数据库中的字段所在的表中或某值所在的表和字段

    ***********************************字段在哪个表中 select tab.name table_name, col.name column_name from sys ...

  7. 20080904--判断表单中的元素值是否改变了

    使用场景:有些页面,除了保存之外还有一些别的按钮,在点击别的按钮之前,需要看用户是否有没有保存的表单域,如果有,则需要提示用户先保存,这时时候就要判断表单域中的内容是否改变了. 实现方式:Form中的 ...

  8. js日历多选(在表单中显示)

    项目需要一个可以选择多个日期的日期选择框,在网上找了几个小时,终于找到了一个靠谱的! 使用方法: 调用方法很简单: <input type="text" name=" ...

  9. 如何给FormPanel表单中的元素赋值以及获取表单元素值

    1.定义表单元素的name属性如下 var HLV = new Ext.form.TextField({fieldLabel: '汇率',name:'EXCHANGERATE',anchor: '30 ...

最新文章

  1. 计算机CPU哪家好,2019年电脑cpu排行榜_电脑CPU哪个好 电脑CPU排行榜2019
  2. 他奶奶的,我要再不写技术文章,找工作都没有说服力!
  3. FortiAnalyzer-VM 安装使用
  4. 物联网在智慧仓库的价值体现
  5. mysql 6.17_2020 6/17 mysql数据的增删改查
  6. JVM垃圾收集器与内存分配策略学习总结
  7. bootstracp实现树形列表_Java实现一致性哈希算法,并搭建环境测试其负载均衡特性...
  8. java正则 链接_Java使用正则表达式匹配获取链接地址的方法示例
  9. 在线高精度在线计时器(秒表)
  10. 14.Linux 高性能服务器编程 --- 多线程编程
  11. html 中的特殊字符转义,html拼接字符串中特殊字符(‘ “ 等的转义问题)
  12. oracle函数调用语法,simpleJdbcCall调用函数语法
  13. unity2020 for Mac 安装下载详解
  14. “一天搞懂深度学习”笔记
  15. X32位 天堂2 二章/三章 服务端协议号修改方法
  16. For A, B such that AB is square, prove trAB = trBA.
  17. python海贼王_Python 学习笔记---爬取海贼王动漫
  18. 国家以及省-市-区三级联动的js数组
  19. 用python计算100以内的素数_python-找出100以内的质数
  20. 优秀班级答辩PPT模板

热门文章

  1. oracle密码不能重复用_重复码
  2. java 管理多个进程_管理多个Java安装
  3. 建立无服务器的“ Hello World”功能
  4. 初步了解Redis Streams以及如何在Java中使用它们
  5. 如何用Java编写类似C的Sizeof函数
  6. java即时编译器_Java即时编译:不仅仅是一个流行词
  7. xmx java_为什么我的Java进程比Xmx消耗更多的内存?
  8. Spring JPA数据+Hibernate+ MySQL + Maven
  9. 取消堆集以提高延迟并减少AWS账单
  10. extjs6 mvvm_ZK 6中的MVVM初探