我正在构建一个有角度的应用程序。
我需要收听onKeyDown
事件(特别是ESC事件)才能关闭侧边栏。
但是当我这样做的时候,似乎是每次按下按键都会刷新,这很烦人,因为我的页面上随机颜色每次都会变化。
index.html:
<body ng-keydown="onKeyDown">
...
</body>
和js:
$rootScope.onKeyDown = function ($event) {
if ($event.keyCode == 27) {
$rootScope.sidebar = false
}
/*
else {
//please don't refresh the scope
}
*/
}
是否正常,以及在没有任何变化时如何避免角度刷新页面?
答案 0 :(得分:2)
禁用使用ngModelOptions在每次击键时触发$ scope digest的默认事件。
实施例
// This disables the INPUT from triggering digests
<input ng-model="someModel" ng-model-options="{updateOn:''}" ng-keydown="update($event)">
// manually check and trigger a $digest
$scope.update = function(e) {
if(e.keyCode == 27) {
$scope.$digest();
}
}
如果要全局执行此操作,则需要配置应用程序(而不是将ng-model-options应用于页面上的每个输入)。请参阅AngularJS set global ngModelOptions。
当然有更优雅的解决方案,但它们需要大量的潜水潜水和忍者技能。因此,人们对Angular感到沮丧。
答案 1 :(得分:0)
我没有使用ng-keydown
attr,而是切换到keydown
$document
中app.run()
的绑定ng-keydown
事件:
$document.bind('keydown', function ($event) {
if ($event.keyCode == 27) {
$rootScope.sidebar = false;
$rootScope.$digest()
}
});
更清洁。{{1}}