Events 修改textChange nativescript中的文本

Events 修改textChange nativescript中的文本,events,nativescript,angular2-nativescript,angular-event-emitter,Events,Nativescript,Angular2 Nativescript,Angular Event Emitter,我目前正在使用HostListener,以便能够在用户键入文本的同时格式化用户文本。例如,如果用户正在键入电话号码,我希望能够根据需要添加格式。如果字符串是0000,我希望文本是000-0,如果文本是0000000000,那么“(801)123-1234”。我有这样做的逻辑,但我目前正在使用hostlistener来做这件事 @HostListener("textChange") public onTextChange(target): void { this.el.text =

我目前正在使用HostListener,以便能够在用户键入文本的同时格式化用户文本。例如,如果用户正在键入电话号码,我希望能够根据需要添加格式。如果字符串是0000,我希望文本是000-0,如果文本是0000000000,那么“(801)123-1234”。我有这样做的逻辑,但我目前正在使用hostlistener来做这件事

  @HostListener("textChange")
  public onTextChange(target): void {
    this.el.text = this.phoneFormatPipe.transform(this.el.text)
  }
这是可行的,但它会一直调用自己,直到达到最大堆栈调用限制为止。这显然太慢了,所以我的问题是:如何在不触发textChange事件的情况下修改元素中的文本?还是有其他方法来实现这一点


提前谢谢!快乐编码

有更好的方法来做你正在做的事情,但我不确定是否有更好的方法。来自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;
  }
}

有更好的方法来做你正在做的事情,但我不确定是否有更好的方法。来自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;
  }
}

它将是递归的,直到你确定它不是带有if条件的同一个字符串,就像@Ian的例子一样


此外,我建议在每次更改时手动检查格式化文本。

它将是递归的,直到您确定它不是带有if条件的同一字符串,如@Ian的示例中所示


此外,我还建议每次更改时手动签出格式化文本。

我以前尝试过这种方法,但掩码是静态的。例如“(000)-000-0000”,我不能修改为接受超过10个数字,或者至少我不知道如何修改。当我以编程方式修改掩码时,它似乎会使抛出一些随机字符串的实现陷入混乱。例如“(000)-000-0000”,我不能修改为接受超过10个数字,或者至少我不知道如何修改。当我以编程方式修改掩码时,它似乎与抛出一些随机字符串的实现相混淆。