使用动态/更新参数的 Angular 7 自定义验证

Ank*_*iya 6 angular-validation angular angular-reactive-forms angular-validator

我正在使用 Angular 7 和材料设计组件

我需要将 requireMatch 验证添加到 mat-autocomplete 中。

我已经使用参数创建了自定义验证,但参数值确实会动态变化。

下面是我的组件代码。

this.stepFormGroup = this.formBuilder.group({
    AccessCode: ["", [Validators.required, this.requireMatch(this.accessCodeList)]]
});

////require-match validation for access-code
requireMatch = (accessCodes: string[]) => {
    return (control: FormControl) => {
        const selection: any = control.value;
        console.log("accessCodes", accessCodes, "selection", selection);
        if (accessCodes.indexOf(selection)===-1) {
            return { requireMatch: true };
        }
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

accessCodes我面临的问题是我的内部总是空的(init)requireMatch

的更改this.accessCodeList不会反映到验证器。

意味着更改后this.accessCodeList它不会在requireMatch验证器中获得更新的数组。

那么有人知道如何在自定义验证器中传递动态参数吗?

小智 5

当你像这样调用它时,你需要绑定验证函数,否则验证函数将不会绑定输入accessList

[Validators.required, this.requireMatch(this.accessCodeList).bind(this)]
Run Code Online (Sandbox Code Playgroud)

另外,如果你想限制该字段中的某些单词,你可以在这里查看我的 npm 包之一https://www.npmjs.com/package/ng4-validation