【发布时间】:2016-07-17 06:45:15
【问题描述】:
大家好,使用 Angular 以及最后一个 Angular2。
我现在正在处理表单,我看到我正在使用自定义验证(例如:native email validation 不支持非拉丁符号,或者我们需要电话验证,或其他)和 @ 987654322@ 而不是 ngControl 和 Validators。
那么,如果我们可以在构造函数中定义Object,为什么还要使用ngForm 和FormBuilder?
简单示例:
ngForm:
import {FormBuilder, Validators, FORM_DIRECTIVES, AbstractControl, ControlGroup} from 'angular2/common';
@Component({
selector: 'form',
template: `<form [ngFormModel]="ourForm" (ngSubmit)="doSubmit()">
<input ngControl="ourinput" placeholder="Our input" type="text">
<span class="error-message" [class.hidden]="!error">{{message}}</span>
<button>Submit</button>
</form>`,
directives: [FORM_DIRECTIVES]
})
export class someFormCmp {
ourForm: ControlGroup;
error: boolean;
message: string;
constructor(
fb: FormBuilder
) {
let some = this;
some.ourForm = fb.group({
ourinput: ['Something...', Validators.required]
});
some.error = false;
some.message = '';
}
doSubmit() {
let some = this;
// our custom validation
if (!valid(some.ourForm.controls['ourinput'].value)) {
some.error = true;
some.message = 'Field is not valid';
}
if (!error) {
// some tasks what we'll do next
}
}
}
VS
ngModel:
@Component({
selector: 'form',
template: `<form (ngSubmit)="doSubmit()">
<input [(ngModel)]="ourinput" placeholder="Our input" type="text">
<span class="error-message" [class.hidden]="!error">{{message}}</span>
<button>Submit</button>
</form>`
})
export class someFormCmp {
ourForm: any;
error: boolean;
message: string;
constructor() {
let some = this;
some.ourForm = {
ourinput: 'Something'
};
some.error = false;
some.message = '';
}
doSubmit() {
let some = this;
// our custom validation
if (!valid(some.ourForm.ourinput)) {
some.error = true;
some.message = 'Field is not valid';
}
if (!error) {
// some tasks what we'll do next
}
}
}
如果有一个,两个,三个字段,没有太大的区别。但是如果有 6 个、10 个或更多字段并且我们使用自定义验证,则很难维护此代码。
【问题讨论】:
标签: javascript validation angular angular2-forms