angular - 检查是否需要 NgControl

标签 angular angular-reactive-forms primeng angular-forms

出于各种原因,我有几个包装 PrimeNG 组件的自定义组件。我的组件的一些实例以 react 形式使用,并且字段的“要求”是使用 Validators.required 验证器设置的。

PrimeNG 组件提供了一个required 属性。

如何检查组件的 NgControl 是否需要验证器?有 .disabled.invalid,但 .invalid 可能意味着任何东西。

这是我现在使用的,它适用于下拉菜单,但对于任何其他类型的输入都是不正确的。

@Component({
  selector: 'my-component',
  templateUrl: 'my.component.html'
})
export class MyComponent implements OnInit, ControlValueAccessor {
  
  @Input()
  public disabled: boolean
  @Input()
  public required: boolean

  constructor(
        @Optional() @Self() public ngControl: NgControl
  ) {
        if (this.ngControl != null) {
            this.ngControl.valueAccessor = this;
        }
    }

    ngOnInit() {
        if (this.ngControl) {
            this.required = this.ngControl.invalid;
            this.disabled = this.ngControl.disabled;
        }
    }
}

我确信有更好的方法来做到这一点,但我不知道怎么做。

最佳答案

尝试检查控件是否具有必需的验证器,如下所示:

  ngOnInit() {
    if (this.ngControl) {
      this.required = this.hasRequiredValidator(this.ngControl.control);
      this.disabled = this.ngControl.disabled;
    }
  }

  hasRequiredValidator(control: AbstractControl): boolean {
    if (control.validator) {
      const validator = control.validator({} as AbstractControl);
      if (validator && validator.required) {
        return true;
      }
    }
    return false;
  }

关于angular - 检查是否需要 NgControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69121417/

相关文章:

angular - 如何从 Angular 4 中的 index.html 访问环境常量?

Angular 6 设置指令

Angular 6 : Reactive Form's updateOn: 'submit' is not updating value after submitting

javascript - 使用 Angular 检测对 iframe 的点击

javascript - 无法在 ThreeJS 中显示对象。出现错误 : THREE. OBJLoader:意外行: "usemap glass"

angular - HMR 没有使用 Angular CLI 更新 View

angular - 当响应式(Reactive)表单中所有表单字段都需要时,我们如何设置 Validators.required 一次?

javascript - 如何在 Reactive Forms 中重置一组 formControls?

chart.js - 如何使用PrimeNg的宽度和高度图表?

javascript - primeng 覆盖面板 appendTo ="body"替代 css