当前位置: 首页 > 知识库问答 >
问题:

预期的验证器返回Promise或观察者

谷梁振
2023-03-14

我正在尝试对Angular 5进行自定义验证,但我面临以下错误

Expected validator to return Promise or Observable

如果值不符合要求,我只想向表单返回一个错误,这是我的代码:

这是我的表单所在的组件

  constructor(fb: FormBuilder, private cadastroService:CadastroService) {
    this.signUp = fb.group({
      "name": ["", Validators.compose([Validators.required, Validators.minLength(2)])],
      "email": ["", Validators.compose([Validators.required, Validators.email])],
      "phone": ["", Validators.compose([Validators.required, Validators.minLength(5)])],
      "cpf": ["", Validators.required, ValidateCpf]
    })     
   }

此代码位于包含我要实现的验证的文件中:

import { AbstractControl } from '@angular/forms';

export function ValidateCpf(control: AbstractControl){
    if (control.value == 13445) {
        return {errorCpf: true}
    }
    return null;
}

这种验证只适用于可观察到的情况吗?或者我可以在没有promise或可观察的情况下进行验证吗?

共有3个答案

濮阳振海
2023-03-14

我认为,除了公认的答案外,最好澄清一下发生错误的原因,因为当使用反应式表单创建FormControl时,在initial_value之后,以下参数分别是以数组形式分组的同步验证器和异步验证器。例如:

myFormGroup = this.fb.group({
    myControl: ['', [ mySyncValidators ], [ myAsyncValidators ] ]
})

如果控件恰好只有其中之一,Angular将其作为单个元素接受。例如。:

myFormGroup = this.fb.group({
    myControl: ['', mySyncValidator, myAsyncValidator ]
})

因此,当忘记对括号进行分组时,Angular假设第二个验证器项是Async验证器的一部分,因此我们得到预期验证器返回Promise或Observable

越望
2023-03-14

以下内容应该有效:

  "cpf": ["", [Validators.required, ValidateCpf]]

表单控件需要以下参数:

constructor(formState: any = null, 
            validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,
            asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null)

从 https://angular.io/api/forms/FormControl

万承志
2023-03-14

这意味着你必须在数组中添加多个验证器

。示例:

有错误

profileFormGroup = {
  budget: [null, Validators.required, Validators.min(1)]
};

上面一个抛出错误,验证器返回Promise或Observable

修复:

profileFormGroup = {
  budget: [null, [Validators.required, Validators.min(1)]]
};

说明:

在角度反应式形式验证中,通过使用内置的验证器完成,当使用多个验证器时,可以在第二个位置的数组中给出。

FIELD_KEY: [INITIAL_VALUE, [LIST_OF_VALIDATORS]

 类似资料:
  • 新的云功能和承诺。我尝试在不同的位置添加承诺,但仍然在日志中得到消息。第一,我不确定我应该在哪里添加承诺,第二,我是否应该什么也不回。在调用match(如果条件满足,则创建channel)之后,我不需要执行另一个函数。虽然触发onCreate会有多个用户,所以我想确保每次执行一个用户。 编辑1-我尝试将事务更改为使用await,这样它将只在事务之后更改UserLife节点。得到这两个警告。1)应在

  • 有人能向我解释一下为什么运算符可以接受返回或的函数吗? 官方文件说: FlatMap运算符通过将您指定的函数应用于源可观察对象发出的每个项目来转换可观察对象,其中该函数返回本身发出项目的可观察对象。 为什么它也可以返回数组? 例如,它们都是有效的: 但这不起作用:

  • 函数应该从get请求返回一个 在这种情况下,我只能在为真时执行请求,否则我在函数

  • 查看下面的代码,我只期望对的调用发生一次,但测试失败并对其进行了四次调用。这些调用发生在哪里?我想编写一个测试以确保只对进行了一次调用。 来源 输出 详细信息Java1.6, JUnit 4.11, Mockito 1.9.5 如果您将深度存根视为模拟对象树,那么您应该只验证叶子(“链中的最后一个模拟”),因为节点包含在设置叶子行为所需的调用链中。换句话说,节点在叶子的设置过程中被调用。

  • 在第一次测试运行期间,如果我使用或而不是,则会发生以下错误(请参阅错误消息)。使用时,应用程序启动并工作时只会出现一个错误:“error o.h.e.j.e.i.jdbconvironmentimpl-无法从数据库java.sql.SQLException:数值溢出” 如果你能帮助我,我将非常高兴。不幸的是,以前的论坛报名没有成功。 应用程序 Oracle设置 HikariCP设置 登录中 JPA

  • 问题内容: 我一直在阅读Observer模式,以保持UI处于最新状态,但仍然看不到它的用途。即使在我的特定对象中通知了我的MainActivity然后运行update();方法我仍然无法使用Pet对象来获取更新值,因为该对象是在Oncreate中创建的…而我只是无法创建新对象,因为那时变量会有所不同..这是我的实施,它似乎不起作用。 观察者/ MainActivity 可观察/宠物 问题答案: 首