首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何触发Angular验证指令,以便在与之比较的值发生变化时进行更新?

如何触发Angular验证指令,以便在与之比较的值发生变化时进行更新?
EN

Stack Overflow用户
提问于 2018-09-06 13:07:51
回答 2查看 2.3K关注 0票数 1

我构建了一些自定义表单验证指令,用于将表单域与其他属性进行比较。当您更改表单域的值时,它们工作得很好,验证会触发并更新表单域的有效性。

我遇到的问题是,当我比较的属性更改表单验证时,表单验证不会被触发,与属性比较的表单域也不会更改有效性。

我在这里创建了一个stackblitz示例。

https://stackblitz.com/edit/angular-t7h2ok

当您更改第一个字段的值时,如果它与其他字段相同则无效,否则有效。问题是,当我更改其他字段时,我希望确保在更改其他属性时更新第一个表单域的有效性。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-14 09:23:16

对于任何可能感兴趣的人来说,一个更简洁的解决方案是在验证器中实现OnChanges并添加以下代码。

代码语言:javascript
复制
onChange: () => void;

ngOnChanges(changes: SimpleChanges): void {
    if ('theNameOfYourPropertyToWatch' in changes)) {
        if (this.onChange) this.onChange();
    }
}

registerOnValidatorChange(fn: () => void): void {
    this.onChange = fn;
}

我已经为我的验证器实现了一个ValidatorBase类来实现这一点。这是一场堆栈闪电战。

https://stackblitz.com/edit/angular-cfexiy

票数 5
EN

Stack Overflow用户

发布于 2018-09-11 03:31:17

为任何可能感兴趣的人回答我自己的问题。

虽然我在其他地方确实使用了Powkachu的答案,但我以前读过那篇文章,但我在这个实例中的场景要求我使用box语法将验证属性绑定到属性,并且在这个实例中我不能使用属性来表示控件名称的字符串。

我在一个视图变量中引用了目标输入的ngModel

代码语言:javascript
复制
<input name="value" [(ngModel)]="value" [notEqual]="other" #valueModel="ngModel">

现在可以通过调用控件的updateValueAndValidity方法来触发验证。

代码语言:javascript
复制
<input name="other" [(ngModel)]="other" (change)="valueModel.control.updateValueAndValidity()">

这是一个stackblitz https://stackblitz.com/edit/angular-9fnsmz

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52196879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档