表单提交,表单全部校验成功才能提交,当表单校验错误,表单边框变红,同时有错误提示信息,有重置功能
在分析代码之前,首先明确 FormControl、formControl、formControlName、FormGroup、formGroup、formGroupName、FormArray、formArray、formArrayName 都是什么意思以及它们的用法。
当使用响应式表单时,FormControl 类是最基本的构造块。要注册单个的表单控件,在组件中导入 FormControl 类,并创建一个 FormControl 的新实例,把它保存在类的某个属性中。
export class AppComponent implements OnInit {
const control = new FormControl('', Validators.required);
console.log(control.value); // ''
console.log(control.status); // 'INVALID'
}
在组件类中创建了控件之后,还要把它和模板中的一个表单控件关联起来,为表单控件添加 formControl 绑定。
<label>
Name:
<input type="text" [formControl]="name">
</label>
<div>
<input type="text" [formControl]="myForm.controls.firstName"/>
<input type="text" [formControl]="myForm.controls.lastName"/>
<input type="text" [formControl]="myForm.controls.email"/>
<input type="text" [formControl]="myForm.controls.title"/>
</div>
//等同于
<div [formGroup]="myForm">
<input type="text" formControlName="firstName"/>
<input type="text" formControlName="lastName"/>
<input type="text" formControlName="email"/>
<input type="text" formControlName="title"/>
</div>
FormGroup 把每个子 FormControl 的值聚合进一个对象,它的 key 是每个控件的名字。它通过归集其子控件的状态值来计算出自己的状态。如果组中的任何一个控件是无效的,那么整个组就是无效的。
FormArray 聚合了数组中每个表单控件的值。它会根据其所有子控件的状态总结出自己的状态。如果 FromArray 中的任何一个控件是无效的,那么整个数组也会变成无效的。
fromGroup 可以然我们对表单内容进行分组,方便我们在语义上区分不同类型的输入,本例中,地址细分为“省”、“市”、“区”。
this.formGroup = this.fb.group({
name: ['', nameValidator()],
age: ['', ageValidator()],
sex: ['', sexValidator()],
address: this.fb.group({
province: ['', requiredValidator('请输入省')],
city: ['', requiredValidator('请输入市')],
district: ['', requiredValidator('请输入区')]
})
});
address 此时不是 fromControl 而是 formGroup。
<div class="form-group"
formGroupName="address">
<label>地址:</label>
<div>
<label>省:</label>
<input type="text"
formControlName="province">
<p>{{errorMessage('province')}}</p>
</div>
<div>
<label>市:</label>
<input type="text"
formControlName="city">
<p>{{errorMessage('city')}}</p>
</div>
<div>
<label>区:</label>
<input type="text"
formControlName="district">
<p>{{errorMessage('district')}}</p>
</div>
</div>
在获取 省市区的 formControl 时,可以通过这样获取
// 太复杂了
this.formGroup.controls['address'].controls['province'];
// 同样复杂
this.formGroup.get('address').controls['province'];
// 还好
this.formGroup.get(['address', 'province']);
第三种方式虽然简单,但是不够完美,get方法不能一步到位,必须同时传入 formGroupName 和 formControlName。因此在查看单个表单是否有错误信息时,必须先判断 formControlName 是子组件还是孙子组件。
errorMessage(formControlName: string): string {
let control: AbstractControl;
if (this.formGroup.contains(formControlName)) {
control = this.formGroup.get(formControlName);
} else {
control = this.formGroup.get(['address', formControlName]);
}
return ((control.touched || control.dirty) && control.invalid) ? control.errors.message : '';
}
contains方法:检查组内是否有一个具有指定名字的已启用的控件,存在返回 true,不存在返回 false。
来自:https://segmentfault.com/a/1190000018249859
搜索输入框中,只当用户停止输入后,才进行后续的操作,比如发起Http请求等。本文将分别探讨在angular.js和vue.js中如何实现对用户输入的防抖。
如果想像我一样全面的了解Angular的脏值检测机制,除了浏览源代码之外别无他法,网上可没有太多可用信息。大部分文章都提到,Angular中每个组件都自带一个脏值检测器,但是它们都仅仅停留在脏值检测的策略和案例的使用,并没有做太多的深入。
每次我读到 Angular 如何操作 DOM 相关文章时,总会发现这些文章提到 ElementRef、TemplateRef、ViewContainerRef 和其他的类。尽管这些类在 Angular 官方文档或相关文章会有涉及,但是很少会去描述整体思路
使用 angular JS 的时候,把 angularJS 放到文件底部,在渲染页面的时候,会出现闪一下的情况。解决办法:1、使用 ng-cloak ;2、将angular.js的引入放到head前,提前加载;3、使用 ng-bind
在使用Angular的时候,希望能像VUE那样,修改代码后浏览器不刷新,页面对应修改的组件自动更新的功能。这个功能的名字时HMR (hot module replace)。稍微研究了一下,发现在angular/cli创建的项目中,实现这个不算太难,步骤如下
Angular 6目的是为了使Angular变得更小,更快,更易于使用。Angular 6版本更加关注底层框架和工具链,同时加快了工具链在Angular中的运行速度,除此以外,这次更新还包括框架包
Angular2项目日常开发中所遇问题及解决方案记录:angular-cli修改域名及端口号、解决双击变蓝的问题、修改浏览器滚动条的默认样式等等
ngClass要绑定的类名会在tr根据数据循环生成html的过程中调用组件中定义的isHideClass方法,并把i(index)带过去让方法使用根据方法逻辑返回的类名去绑定写好的样式
这篇文章主要介绍了Angularjs的$http异步删除数据详解及实例的相关资料,这里提供实现思路及实现具体的方法,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。
在angularJS中定义服务共有四种常见的方式:factory,service,provider,constant,value.使用形式的不同:
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!