在 Angular 9 中开发的自定义指令不适用于手机
Custom Directive developed in Angular 9 not working in mobiles
我在 angular 9 中开发了一个自定义指令来输入 仅数字和 1 个小数 。该指令在桌面上完美运行,但在移动设备上却不行(就好像该指令甚至不存在于输入字段中一样)。我使用 keydown 事件作为主机。这是 Angular 方面的问题吗?我需要参考的任何建议或现有帖子。
编辑
@Directive({
selector: 'input[allowCurr]',
host: { '(keydown)': 'allowND($event)' }
})
export class AllowCurrDirective {
@Input() allowCurr: string;
/* Rest of my Logic here */
}
我添加这么多是因为我在我的 allowND 函数中放入了 alert,它在里面,但是 event.key,我曾经用来捕获用户键输入,未定义。
你可以试试 HostListener
import { Directive, HostListener, Input } from "@angular/core";
@Directive({
selector: "input[allowCurr]"
})
export class AllowCurrDirective {
@HostListener("keydown", ["$event"])
allowND(e) {
console.log(e.key);
}
@Input() allowCurr: string;
/* Rest of my Logic here */
}
我终于解决了这个问题。我必须使用 event.target.value 和输入事件来满足我的要求,即只允许在输入框中输入数字和一位小数。
:: 研究 ::
在您的智能手机浏览器中打开此 MDN URL。您可以看到在输入事件中,KeyboardEvent.data 在桌面上的工作方式与 KeyboardEvent.key 相同。这意味着您可以在智能手机键盘上看到您按下的键。 (我也在 W3schools try-it 编辑器中,在我的智能手机中确认了这一点)。但问题是 KeyboardEvent.data 与 iPhone 不兼容。也就是说,我既不能使用 event.key 也不能使用 event.data。输入事件不可取消(这意味着 event.preventDefault() 也不会工作)所以无论您输入什么,如果它没有通过条件,输入值应该是:
let targetVal = event.target.value;
event.target.value = targetVal.substring(0, targetVal.length -1);
我在 angular 9 中开发了一个自定义指令来输入 仅数字和 1 个小数 。该指令在桌面上完美运行,但在移动设备上却不行(就好像该指令甚至不存在于输入字段中一样)。我使用 keydown 事件作为主机。这是 Angular 方面的问题吗?我需要参考的任何建议或现有帖子。
编辑
@Directive({
selector: 'input[allowCurr]',
host: { '(keydown)': 'allowND($event)' }
})
export class AllowCurrDirective {
@Input() allowCurr: string;
/* Rest of my Logic here */
}
我添加这么多是因为我在我的 allowND 函数中放入了 alert,它在里面,但是 event.key,我曾经用来捕获用户键输入,未定义。
你可以试试 HostListener
import { Directive, HostListener, Input } from "@angular/core";
@Directive({
selector: "input[allowCurr]"
})
export class AllowCurrDirective {
@HostListener("keydown", ["$event"])
allowND(e) {
console.log(e.key);
}
@Input() allowCurr: string;
/* Rest of my Logic here */
}
我终于解决了这个问题。我必须使用 event.target.value 和输入事件来满足我的要求,即只允许在输入框中输入数字和一位小数。
:: 研究 ::
在您的智能手机浏览器中打开此 MDN URL。您可以看到在输入事件中,KeyboardEvent.data 在桌面上的工作方式与 KeyboardEvent.key 相同。这意味着您可以在智能手机键盘上看到您按下的键。 (我也在 W3schools try-it 编辑器中,在我的智能手机中确认了这一点)。但问题是 KeyboardEvent.data 与 iPhone 不兼容。也就是说,我既不能使用 event.key 也不能使用 event.data。输入事件不可取消(这意味着 event.preventDefault() 也不会工作)所以无论您输入什么,如果它没有通过条件,输入值应该是:
let targetVal = event.target.value;
event.target.value = targetVal.substring(0, targetVal.length -1);