Изменение текста внутри textChange nativescript - PullRequest
0 голосов
/ 19 ноября 2018

В настоящее время я использую 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?или есть другой способ сделать это?

Заранее спасибо!Удачного кодирования!

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Это будет рекурсивно, пока вы не убедитесь, что это не та же строка с условием if, как в примере с @ Ian.

Также я бы предложил проверить текстовое поле с маской nativescript , а не форматировать текст вручную при каждом изменении.

0 голосов
/ 19 ноября 2018

Есть лучший способ сделать то, что вы делаете, но я не уверен, есть ли еще лучший способ . Исходя из разработки для 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;
  }
}
...