以下html代码片段:
<mat-form-field class='textarea'>
<textarea #txtarea matInput (change)='txtAreaChange()' [placeholder]="label" [(ngModel)]='text'></textarea>
<mat-hint [class.red]="txtarea.value.split('n').length > textAreaLimit[1]" align="start"> {{txtarea.value ? txtarea.value.split('n').length : 0}}/{{textAreaLimit[1]}} lines</mat-hint>
<mat-hint [class.red]="txtarea.value && txtarea.value.split('n').map( len).max() > textAreaLimit[0]" align="end">Longest line: {{txtarea.value ? txtarea.value.split('n').map( len).max() : 0}}/{{textAreaLimit[0]}}</mat-hint>
</mat-form-field>
定义具有双向绑定的文本区域输入。它会检查大小:行的总数和行的最大长度。如果这些大于textAreaLimit
中给出的一些约束,则提示变为红色
我想更改它,这样用户就不能打破这种限制,比如如果最大行数是3,并且有3行,用户就不能添加新行。如何在不打破双向约束的情况下做到这一点?
使用[maxLength]
属性
<textarea #txtarea matInput [maxLength]="maxNo" (change)='txtAreaChange()' [placeholder]="label" [(ngModel)]='text'></textarea>
对于这个特定的需求/行为,您需要创建一个简单的自定义验证器
maxLinesValidator(limit: number): ValidatorFn {
return (control: AbstractControl): {[key: string]: any} | null => {
const exceeded = control.value.length && control.value.split('n').length > limit;
return exceeded ? {'maxLines': {value: true}} : null;
};
}
您将绑定到您的FormControl。你可以看看这个工作的fiddle(src/app/reactive
.ts+html(,其中text
字段被实时验证,如果用户超过的最大行限制,就会显示错误