我必须为AngularJS上的页面制作hotkay。我用
document.addEventListener()
方法keyDownTextField()设置值wordToShow:
export class listenKey {
constructor() {
document.addEventListener("keydown", (e) => this.keyDownTextField(e), false);
}
keyDownTextField(e: any) {
var keyCode = e.keyCode;
this.logKey(keyCode);
this.wordToShow = "Hello world!";
}
logKey(key: any) {
console.log( key );
}
}
有模板:
<div ng-click="$ctrl.logKey()" ng-bind="$ctrl.wordToShow"></div>
问题是:ng-bind在单击div时起作用,但在addEventListener注册按下该键时不起作用。怎么解决?
答案 0 :(得分:0)
AngularJS不知道在事件侦听器回调时触发摘要循环。
您可以将this.keyDownTextField(e)
包裹在超时中:
document.addEventListener("keydown", (e) => $timeout(() => this.keyDownTextField(e), 0), false);
不要忘记注入$timeout
服务!
或者,您也可以在$scope.$apply
this.wordToShow = "Hello world!";
之后致电keyDownTextField(e: any)
。别忘了注入$scope
!
您可能还想检查ng-keypress(ngKeyPress)中内置的AngularJS。