告诉Angular不要刷新视图

时间:2014-12-15 21:01:04

标签: javascript angularjs angularjs-scope

我正在构建一个有角度的应用程序。

我需要收听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
    }
    */
}

是否正常,以及在没有任何变化时如何避免角度刷新页面?

2 个答案:

答案 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 $documentapp.run()的绑定ng-keydown事件:

  1. 工作和
  2. 我认为在身体上添加$document.bind('keydown', function ($event) { if ($event.keyCode == 27) { $rootScope.sidebar = false; $rootScope.$digest() } }); 更清洁。
  3. {{1}}