2

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

方法

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

问题

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

现在,使用 ag-Grid,指令不会在页面加载时加载。单击控件时将加载它,因为它包含在单元格编辑器中。因此,在单击/聚焦时,按以下顺序调用以下命令 -

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

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

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

4

1 回答 1

1

我能够通过使用找出解决方案setTimeout

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

找不到更好的解决方案。让我知道你们是否知道或找到更好的解决方案。谢谢。

于 2020-09-26T13:05:15.097 回答