我有一个奇怪的问题,我正面对角js。让我解释一下......
我正在使用scope.watch来观察文本字段(searchloco)中的文本更改
<input class="typeahead" ng-model="searchloco" data="{{varu}}" search-bar type="text">
我也使用keydown函数来检测输入按键,我需要的是更改location.Path on Enter键按下。
但是当我键入任何键(而不是输入)时它工作正常,即它在手表中获得文本更新以及keydown功能也正常工作。当我按下Enter键时,按键事件会触发但是观察周期不起作用对于这个键,语句“Location.path(”/“)都没有工作,它正好在if语句的下方,它确认它是一个'enter'键,直到或除非我输入另一个键(az)。
element.on( 'keydown' , function (e){
console.log("=== key down pressed === ",e);
if(e.which == 13){
location.path('/search/');
...
...
不确定我是否可以解释这个问题以便易于理解,所以如果我需要解释更多,请告诉我。
答案 0 :(得分:4)
您可能需要将回调中的代码包装在$scope.$apply()中,如下所示:
element.on( 'keydown' , function (e){
$scope.$apply(function () {
console.log("=== key down pressed === ",e);
if (e.which == 13){
location.path('/search/');
}
});
});
然而,建议的&#34;角度方式&#34;这样做是使用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-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/');
});
答案 1 :(得分:0)
您是否尝试过注入$ location并执行$location.path('/search/');
?