gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:58:12 26 4
gpt4 key购买 nike

我在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com