如何在AngularJS中使用ng-bind和document.addEventListener()?

时间:2017-12-11 18:39:34

标签: javascript html angularjs keypress ng-bind

我必须为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注册按下该键时不起作用。怎么解决?

1 个答案:

答案 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。