到底是什么触发了 ControlValueAccessor 的 setDisabledState 函数?

Jak*_*134 5 angular angular-reactive-forms

我试图弄清楚如何实现setDisabledState作为接口一部分的函数ControlValueAccessor,但我无法弄清楚如何从组件本身的外部实际触发该函数。

在我有的组件内

control = new FormControl();

setDisabledState(isDisabled: boolean): void {
    this._renderer.setProperty(this.formField.nativeElement, 'disabled', isDisabled);
  }
Run Code Online (Sandbox Code Playgroud)

如果我在组件的 NgOnInit 中执行以下操作,这会将我的禁用样式设置得很好。但我希望能够通过属性绑定来控制组件的禁用状态。

this.tenantListFormControl.disable();
Run Code Online (Sandbox Code Playgroud)

然而,实际上没有任何东西触发该函数。

我试过了

<app-custom-control [attr.disabled]="true"></app-custom-control>
<app-custom-control disabled></app-custom-control>
<app-custom-control [disabled]="true"></app-custom-control> 
Run Code Online (Sandbox Code Playgroud)

最后一个甚至无效,因为“任何适用的指令等均未提供禁用的属性...”,因为我没有@Input()在组件上的任何位置禁用。无论如何这都没有帮助,因为一旦我设置了它,我应该如何处理它,我无法订阅它并以这种方式触发 setDisabledState 函数,因为它不是可观察的。

我如何实际触发此功能并禁用我的组件?

Cod*_*key 0

不确定是否没有看到更多代码,但我相信您确实需要

@Input() disabled: boolean = false;
Run Code Online (Sandbox Code Playgroud)

在组件/视图中使用一些逻辑来实际处理禁用时应该发生的情况。例如,我有一个自定义控件,它在按钮周围包装了一些逻辑,因此我在[disabled]="disabled"视图中的按钮上有属性。

如果这没有帮助,那么我需要知道自定义控件的用途是什么,以及 Angular / 浏览器如何知道如何禁用它?