【问题标题】:Remove validator after submitting提交后移除验证器
【发布时间】:2020-05-29 10:39:08
【问题描述】:

我创建了两个文本框,一个用于标题,另一个用于名称。

如果文本框未填写,我将使用验证,因此仅在两个都填写时才提交信息。

我的问题是提交后我尝试清除变量的值,并且在清除该值时出现验证消息。

有没有办法成功提交并清除变量的值,验证器不出现?

DEMO

html

<div style="margin-top:16px;width:50%">
    <dx-text-box placeholder="title..." [showClearButton]="true" [(ngModel)]="title">
        <dx-validator>
            <dxi-validation-rule type="required" message="Insert Title">
            </dxi-validation-rule>
        </dx-validator>
    </dx-text-box>
</div>
<div style="margin-top:16px;width:50%">
    <dx-text-box placeholder="name..." [showClearButton]="true" [(ngModel)]="name">
        <dx-validator>
            <dxi-validation-rule type="required" message="Insert Name">
            </dxi-validation-rule>
        </dx-validator>
    </dx-text-box>
</div>

<dx-button text="Submit" [useSubmitBehavior]="true" (onClick)="Save()"></dx-button>

.ts

title: string;
name: string;

Save(){
  if(this.title == "" || this.title == undefined || this.name == "" || this.name == undefined){
  }
  else{
    alert("Sucess !!");
    this.title = "";
    this.name = "";
  }
}

问题

在这里,我填写了文本框并提交成功。我清除了变量的值,但是这样做时,验证器被激活,而实际上一切都应该处于初始状态:(

【问题讨论】:

    标签: angular typescript devextreme devextreme-angular


    【解决方案1】:

    这是我通常用来在提交后清除所有验证器的技巧。

      @ViewChildren(DxValidatorComponent) validatorViewChildren: QueryList<DxValidatorComponent>;
    
      private clearDxValidators = () => {
        this.validatorViewChildren.toArray().map(ref => {
          ref.instance.reset();
        })
      }
    
    
    

    阅读更多关于reset()

    【讨论】:

    • 我也有同样的问题,不幸的是这个解决方案并没有解决问题。如果您使用验证,则在执行重置后,始终会出现验证消息。
    • @John ,您能否提供有关您的验证句柄和验证消息的更多详细信息,rest() 应该清除包括消息在内的所有内容。
    【解决方案2】:

    作为一种快速解决方法,您可以将模板包装在一个表单中,然后使用它来检查它是否是原始的,以便知道是否显示验证器消息。然后,您可以重置表单(在通过 ViewChild() 将其导入组件后),而不是为您的属性分配一个空字符串。

    不过,这确实有点像 hack,因为您使用的工具包应该自动知道这一点。如果没有,那为什么还要使用它。

    另外,我建议你也开始阅读Angular Reactive Forms

    无论如何,我在Stackblitz 中附上了我建议的更改。

    祝你的项目好运!

    【讨论】:

    • 非常感谢您的回复。变量的清理很棒,唯一的问题是,如果您不填写任何内容并单击提交,验证器不会出现在我面前:(
    • 好的,修好了。 *ngIf="form?.dirty" 在 dxi-validation-rule 和 Save() 函数上,如果 (...它们是空的...) 然后 this.form.form.markAsDirty();然后是其他。你可以看到我的更改also
    • 几乎完美。唯一的问题是,当我在标题中插入内容时,单击名称的 texbox 会立即激活验证器。如果您未填写所需的文本框,则验证器仅应出现在提交中。
    • 很抱歉,但我不会花时间让它对您完全可用。我只是试图向您展示一种方法。有多种方法,正如我所说,它很hacky,因为这通常不是它应该如何工作的。您应该阅读我与您共享的链接,并尝试以 Reactive 方式实现它。祝你好运!
    猜你喜欢
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多