【发布时间】:2018-09-09 16:22:58
【问题描述】:
我创建了一个自定义输入控件。我不想创建任何自定义验证。我想使用默认要求,minLength,maxLength 等。我知道我可以这样做
this.form.controls["firstName"].setValidators([Validators.minLength(1), Validators.maxLength(30)]);
但我无法从父组件发送表单引用。如何在文本框组件中使用 setValidator。
// input-box.component.ts
import { Component, Input, forwardRef } from '@angular/core';
import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';
@Component({
selector: 'app-input-box',
template:`<label >{{inputdata.label}}</label><br>
<input type="text" required #textBox [value]="textValue" (keyup)="onChange($event.target.value)" />`,
styleUrls: ['./input-box.component.less'],
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => InputBoxComponent),
multi: true
},
/*{
provide: NG_VALIDATORS,
useExisting: forwardRef(() => InputBoxComponent),
multi: true,
}*/]
})
export class InputBoxComponent implements ControlValueAccessor {
@Input() inputdata: any;
private textValue: any = '';
onChange(value) {
this.textValue = value;
this.propagrateChange(value);
}
private propagrateChange = (_: any) => { };
writeValue(value: any) {
if (this.inputdata.value) {
this.textValue = this.inputdata.value;
this.propagrateChange(this.inputdata.value);
}
}
registerOnChange(fn: (value: any) => any) {
this.propagrateChange = fn;
}
registerOnTouched() { }
}
在不同的组件中使用
<app-input-box name="textBoxParent_{{index}}" [inputdata]="goaldata" ngModel ></app-input-box>
【问题讨论】:
标签: angular angular5 angular2-forms angular4-forms angular-validation