我当前正在使用HostListener来在用户键入文本的同时格式化用户文本。例如,如果用户正在输入电话号码,我希望能够根据需要添加格式。如果字符串是0000,我希望文本是000-0,如果文本是0000000000,则“(801)123-1234”。我有这样做的逻辑,但是我目前正在使用主机侦听器来执行此操作。
@HostListener("textChange")
public onTextChange(target): void {
this.el.text = this.phoneFormatPipe.transform(this.el.text)
}
这有效,但它会一直自我调用,直到达到最大堆栈调用限制为止。这显然太慢了,所以我的问题是:如何在不触发textChange事件的情况下修改元素内的文本?还是有另一种方法可以做到这一点?
提前谢谢!编码愉快!
答案 0 :(得分:2)
有一种更好的方式来做您正在做的事情,但是我不确定是否有甚至更好的方法。来自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;
}
}
答案 1 :(得分:0)
这将是递归的,直到您确保它与带有if条件的字符串不同(如@Ian的示例)。
我也建议您检出nativescript-masked-text-field,而不是在每次更改时手动设置文本格式。