angular 功能请求:向表单控件、表单组和表单数组添加错误更改:将Observable< ValidationErrors | null>添加到FormControl、FormGroup和FormArray中,

bgibtngc  于 6个月前  发布在  Angular
关注(0)|答案(1)|浏览(51)

与功能请求相关的@angular/*包(s)是什么?

forms

描述

你好,Angular团队。
我遇到了一个问题,其中我有
父组件和子组件,子组件处于OnPush状态。
子组件生成表单并将其发送到父组件
我们在父组件中有Submit按钮,当我们提交表单时,首先它会检查表单的有效性,如果表单无效,它会将所有字段标记为已触摸。
因此,由于子组件的变更检测是OnPush,它不会显示任何错误。
所以我在想,也许我们可以有一个类似于valueChangesstatusChangeserrorChanges,这将帮助我们在模板中轻松使用它通过async管道?

建议的解决方案

我几乎有相同的想法来实现它。

class FormControl extends AbstractControl {
   //.......................
   //.......................
   //.......................
   
   
   public get errorChanges(): Observable<ValidationErrors | null> {
      return this.valueChanges.
         pipe(
            startWith(this.value),
            mapTo(this.errors),
            disctinctUntilChanged((prevState, currentState) => {
                const prevErrors =  Object. getOwnPropertyNames(prevState || {});
                const newErrors =  Object. getOwnPropertyNames(currentState || {});
                const errorsList = new Set([...prevErrors, ...newErrors]);
              
                for(let error of errorsList) {
                     if(prevErrors[error] !== newErrors[error]) {
                         return true;
                     }
                } 
                
                return false;
            })
         );
   }
}

考虑过的替代方案

.

dgsult0t

dgsult0t1#

也许这是我们可以添加到由#54579引入的新可观察对象中的内容。

相关问题