在 ag-Grid 单元格编辑器中使用自定义指令时,在 writeValue() 之前调用焦点事件

focus event is getting called before writeValue() when using custom directive inside ag-Grid cell Editor

目标:使 ag-Grid 单元格可编辑为货币控件。

方法:

  1. 为货币创建了自定义指令。
  2. 创建了一个使用该货币指令的自定义单元格编辑器。

问题:

在正常情况下,在页面加载时,使用指令(实现 ControlValueAccessor)加载控件并调用 writeValue() 来初始化控件中的值。因此,我使用 writeValue() 显示带有货币 ($) 符号的值。当用户单击控件时,我通过在焦点事件中编写逻辑来显示没有货币符号的值。

现在,对于 ag-Grid,指令不会在页面加载时加载。它会在单击控件时加载,因为它包含在单元格编辑器中。因此,在 click/focus 上,将按以下顺序调用以下内容 -

  1. focus 事件 - 它会将控件值设置为 null,因为尚未使用 writeValue 设置任何值。但不久之后,调用了 writeValue()。
  2. writeValue() - 它将控件值设置为带有 $ 符号的值,这是我不想要的。我想要没有 $ 符号的价值,重点。

那么,如何在指令的焦点事件之前调用 writeValue() 呢?

注意:顺便说一句,单元格编辑器的 2 次单击功能工作正常,但我想要 1 次单击解决方案,因为我已将焦点设置在 afterGuiAttached().

我能够通过使用 setTimeout:

找到解决方案

 public afterGuiAttached(): void {
    // Set focus after the value has been written into the control
    setTimeout(() => {
      this.input.nativeElement.focus();
    });
 }

找不到更好的解决方案。如果你们知道或找到更好的解决方案,请告诉我。谢谢