我想在输入字段模糊时向服务器提交一些数据。用户还应该能够通过按Enter键来模糊输入字段。
不幸的是,结果如下:$rootScope:inprog: $apply already in progress error。
Plunkr - 提前致谢!
答案 0 :(得分:10)
以下是发生的事情:
target.blur()
模糊是同步执行的,并立即触发处理程序而不完成第一个摘要。
在我看来,这不是你的代码的问题,而是一个Angular bug。我一直在努力想出一个更好的解决方案,但我只能找到:
app.controller('BlurCtrl', function($scope, $timeout) {
$scope.blurModel = "I'm the value"
$scope.blurOnEnter = function( $event ) {
if ( $event.keyCode != 13 )
return
// this will finish the current digest before triggering the blur
$timeout(function () { $event.target.blur() }, 0, false);
}
$scope.onBlur = function() {
$scope.result = this.blurModel
}
})
答案 1 :(得分:4)
您可以结帐Angular UI @ http://angular-ui.github.io/ui-utils/
提供详细信息事件句柄相关模糊,焦点,键盘,键盘,按键
<input ui-event="{ blur : 'blurCallback()' }">
<textarea ui-keypress="{13:'keypressCallback($event)'}"></textarea>
<textarea ui-keydown="{'enter alt-space':'keypressCallback($event)'}"> </textarea>
<textarea ui-keydown="{27:'keydownCallback($event)'}"></textarea>
<textarea ui-keydown="{'enter alt-space':'keypressCallback($event)'}"> </textarea>
<textarea ui-keyup="{'enter':'keypressCallback($event)'}"> </textarea>