首页 > 解决方案 > 如何仅在提交时检查 formControl 值?

问题描述

以下代码检查usernamevalueChanges 上的输入。username仅在提交后如何检查输入?(即,等待一个submit事件,并且不检查每个 valueChange?)

      this.formCtls['username'].valueChanges.pipe(
        filter<String>(text=>text.length > 2),
        debounceTime(10),
        distinctUntilChanged(), 
        . . . 

此外,一个次要问题可能不够重要,无法单独作为一个全新的问题打开。. . : 如上所述,为什么我的编辑强迫我在<String>旁边添加泛型filter?我在网上看到了几个代码片段,只有:

      this.formCtls['username'].valueChanges.pipe(
        filter(text=>text.length > 2),
        debounceTime(10),
        distinctUntilChanged(), 

但是没有. <String>_ property 'length' does not exist on type 'unknown'_<String>filter

标签: angularrxjs

解决方案


如果您不介意在提交之前更新该字段,您可以调用updateOn: submit表单控件,例如:

constructor(private fb: FormBuilder) {
  this.myForm = this.fb.group({
    field1: ['', { updateOn: 'submit'}]
  })

  this.myForm.get('field1').valueChanges.pipe(
    filter(text=>text.length > 2),
  )
  .subscribe(val => console.log(val))
}

但是有了这个,表单值在提交之前不会更新这个字段,所以记住这一点很重要。

堆栈闪电战

但我也不明白为什么你不能在提交函数中处理表单控件的一些逻辑,如果你需要做类似的事情。


推荐阅读