【问题标题】:Modifying text inside textChange nativescript修改 textChange nativescript 中的文本
【发布时间】:2018-11-19 19:03:23
【问题描述】:

我目前正在使用 HostListener 以便能够在用户键入的同时格式化用户文本。例如,如果用户正在输入电话号码,我希望能够根据需要添加格式。如果字符串为 0000,我希望文本为 000-0,如果文本为 0000000000,则为“(801) 123 - 1234”。我有这样做的逻辑,但我目前正在使用主机侦听器来执行此操作。

  @HostListener("textChange")
  public onTextChange(target): void {
    this.el.text = this.phoneFormatPipe.transform(this.el.text)
  }

这可行,但它会一直调用自己,直到达到最大堆栈调用限制。这显然太慢了,所以我的问题是:如何在不触发 textChange 事件的情况下修改元素内的文本?还是有其他方法可以做到这一点?

提前致谢!编码愉快!

【问题讨论】:

    标签: events nativescript angular2-nativescript angular-event-emitter


    【解决方案1】:

    有更好的方法来做你正在做的事情,但我不确定是否有更好的方法。来自 iOS 开发,我知道肯定有一个更合适的地方来做这种操作,但在这里做应该不会导致你达到最大堆栈。

    如果您更新源代码来执行此操作,您将避免最大堆栈限制(并显着提高应用的性能)。这不是最佳方式,但它是我目前在 NativeScript 中发现的最佳方式。

    @HostListener("textChange")
    public onTextChange(target): void {
      let newText: string = this.phoneFormatPipe.transform(this.el.text);
      if (this.el.text !== newText) {
        this.el.text = newText;
      }
    }
    

    【讨论】:

      【解决方案2】:

      它将是递归的,直到您确保它不是带有 if 条件的相同字符串,就像在 @Ian 的示例中一样。

      另外我建议检查nativescript-masked-text-field,而不是在每次更改时手动格式化文本。

      【讨论】:

      • 我之前试过这个,但它的掩码是静态的。例如“(000)-000-0000”,然后我不能修改它以接受超过 10 位数字,或者至少我不知道如何。当我以编程方式修改掩码时,它似乎搞砸了抛出一些随机字符串的实现。
      猜你喜欢
      • 1970-01-01
      • 2019-10-23
      • 1970-01-01
      • 2021-12-01
      • 2018-04-07
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多