gpt4 book ai didi

angular - 将参数传递给 Angular 7 模板驱动的表单自定义验证器

转载 作者:行者123 更新时间:2023-12-05 05:08:44 25 4
gpt4 key购买 nike

如何将参数传递给为 Angular 7 中的模板驱动表单编写的自定义验证器?

我从多个其他问题和博客文章中得到了以下代码,但大多数都围绕响应式表单而不是 tempalte。

import { AbstractControl, ValidatorFn, NG_VALIDATORS, Validator, FormControl } from '@angular/forms';
import { Directive, Input } from '@angular/core';

// validation function
function validateMinValue(minValue: number): ValidatorFn {
return (c: AbstractControl) => {

console.log(minValue);
return null;
}
}

@Directive({
selector: '[minValue][ngModel]',
providers: [
{ provide: NG_VALIDATORS, useExisting: MinValueValidator, multi: true }
]
})
export class MinValueValidator implements Validator {
@Input("minValue") minValue;
validator: ValidatorFn;

constructor() {
this.validator = validateMinValue(this.minValue);
}

validate(c: FormControl) {
return this.validator(c);
}
}

如何在这样的输入中访问传递给 minValue 的值

<input type="text" name="testInput" class="form-control"
[(ngModel)]="testValue" required
currencyMask [options]="{ thousands: ',', decimal: '.' }"
minValue="100">

最佳答案

您应该使用 ngOnInit Hook 来初始化验证器,因为构造函数中还没有初始化 Input 属性。

ngOnInit() {
this.validator = validateMinValue(this.minValue);
}

这样,初始化值将传递给您的验证器。

另一种方法是在您的自定义指令中简单定义验证器,并从当前上下文中获取 minValue this:

export class MinValueValidator implements Validator {
@Input("minValue") minValue;

validate(c: FormControl) {
console.log(this.minValue);
return null;
}
}

关于angular - 将参数传递给 Angular 7 模板驱动的表单自定义验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58118986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com