javascript - scope.$watch() 在输入键按下或 location.path 工作后未触发

标签 javascript angularjs

我在使用 angular js 时遇到了一个奇怪的问题。让我解释一下...

我正在使用 scope.watch 来观察文本字段中的文本变化 (searchloco)

<input class="typeahead"  ng-model="searchloco" data="{{varu}}" search-bar   type="text"> 

我也在使用 keydown 函数来检测回车键按下,我需要的是更改位置。回车键按下时的路径。

但是当我键入任何键(不是输入)时它工作正常,即它正在 watch 中获取文本更新以及 keydown 功能也工作正常。当我按下 Enter 键时,按键事件会触发但 watch 循环不起作用对于这个键,语句“Location.path("/") 都不起作用,它就在 if 语句下面,它确认它是一个 'enter' 键,直到或除非我键入另一个键 (a-z)。

 element.on( 'keydown' , function (e){
            console.log("=== key down pressed === ",e);
            if(e.which == 13){
                location.path('/search/');
                 ...
                 ...

不确定我是否可以解释这个问题以便于理解,所以如果我需要解释更多,请告诉我。

最佳答案

您可能需要将回调中的代码包装在 $scope.$apply() 中,像这样:

element.on( 'keydown' , function (e){
    $scope.$apply(function () {
        console.log("=== key down pressed === ",e);
        if (e.which == 13){
            location.path('/search/');
        }
    });
});

ng-keydown

然而,建议的“Angular 方式”是使用 ng-keydown指令而不是执行 jQuery 样式的 element.on()。

HTML:

<input class="typeahead" ng-keydown="keypress" ng-model="searchloco" data="{{varu}}" search-bar type="text">

JavaScript:

$scope.keypress = function ($event){
     console.log("=== key down pressed === ", $event);
     if ($event.which == 13){
         location.path('/search/');
     }
});

ng-提交

理想情况下,您可能希望将输入字段包装在一个表单中,然后处理 ng-submit .这应该以较少平台依赖的方式处理回车键。

<form ng-submit="go">
    <input class="typeahead" ng-model="searchloco" data="{{varu}}" search-bar type="text">
</form>

JavaScript:

$scope.go = function (){
     location.path('/search/');
});

关于javascript - scope.$watch() 在输入键按下或 location.path 工作后未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32996621/

相关文章:

javascript - innerHTML 不显示文本

javascript - 原型(prototype)链、构造函数、继承

javascript - Google Analytics 事件跟踪 - 比较多个事件

angularjs - 在远程 selenium 服务器上运行 Protractor 测试时 Jasmine 规范超时

javascript - 如果过程出现错误,则更改中间进度条的颜色

javascript - 如何使用 ng-repeat 显示标题

JavaScript 使 AJAX 内容淡入

javascript - 如何在 JSF 中运行 D3 Javascript

javascript - 如何在带有ng-repeat的angular js表中使用复选框数组和文本区域/下拉列表数组?

javascript - 将具有键的数组与对象 JavaScript 中的键进行比较