在一个表单控件上使用具有不同updateOn选项的两个自定义验证功能

时间:2019-07-23 13:15:17

标签: angular frontend angular-reactive-forms

我想使用带有两个updateOn选项(模糊和更改)的两个自定义验证功能。这种情况是在更改密码时,应使用默认值为updateOn:'change'的密码策略对新密码进行验证,并且还应使用updateOn:'blur'选项的当前密码对新密码进行验证。

newPassword: new FormControl('', { validators: [Validators.required, passwordMatch()], asyncValidators: [validatePassword()], updateOn: 'blur' }),

我想使用updateOn:'blur'验证passwordMatch()的密码,并用updateOn:'change'验证validatePassword()的同一表单控件

1 个答案:

答案 0 :(得分:0)

我认为这是不可能的,但是您可以在Submit中添加asyncValidator。在updateValueAndValidity之后,订阅statusChange,然后在此订阅中检查提交表单是否有效

    @Override
    public Integer insertOrUpdate(final Email e) {
        if (e == null) throw new IllegalArgumentException();

        if (e.getIdEmail() != null) {
            String sql = "UPDATE Email SET email=? WHERE idEmail=?";
            jdbcTemplate.update(sql, e.getEmail(), e.getIdEmail());
            return e.getIdEmail();
        }
        else {
            final String sql = "INSERT IGNORE INTO Email (email) VALUES (?) ON DUPLICATE KEY UPDATE email=email";
            KeyHolder keyHolder = new GeneratedKeyHolder();
            jdbcTemplate.update(new PreparedStatementCreator() {
                public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
                    PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
                    ps.setString(1, e.getEmail());
                    return ps;
                }
            }, keyHolder);
            return ((Long) keyHolder.getKey()).intValue();
        }
    }

请参阅stackblitz