Javascript 告诉Angular不要刷新视图
我正在构建一个有角度的应用程序 我需要收听Javascript 告诉Angular不要刷新视图,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我正在构建一个有角度的应用程序 我需要收听onKeyDown事件(尤其是ESC事件),以便关闭侧栏。 但当我这样做的时候,似乎每次按下一个键都会刷新视图,这很烦人,因为我的页面上有随机的颜色,每次都会改变 index.html: ... 在js中: $rootScope.onKeyDown=函数($event){ 如果($event.keyCode==27){ $rootScope.sidebar=false } /* 否则{ //请不要刷新范围 } */ } 这是否正常,以及如何避免在没
onKeyDown
事件(尤其是ESC事件),以便关闭侧栏。
但当我这样做的时候,似乎每次按下一个键都会刷新视图,这很烦人,因为我的页面上有随机的颜色,每次都会改变
index.html:
...
在js中:
$rootScope.onKeyDown=函数($event){
如果($event.keyCode==27){
$rootScope.sidebar=false
}
/*
否则{
//请不要刷新范围
}
*/
}
这是否正常,以及如何避免在没有任何更改时刷新页面?禁用默认事件,该事件在每次使用键盘敲击时触发$scope摘要 前
//这将禁用触发摘要的输入
//手动检查并触发$digest
$scope.update=函数(e){
如果(e.keyCode==27){
$scope.$digest();
}
}
如果您希望全局执行此操作,则需要配置应用程序(而不是将ng模型选项应用于页面上的每个输入)。看
当然有更优雅的解决方案,但它们需要大量的源潜水和忍者技能。因此,人们会对Angular感到沮丧。我没有使用
ng keydown
attr,而是在app.run()
中的$document
事件上切换到bindingkeydown
,它:
ng keydown
更干净Angular的最佳实践要求ViewModel属性的getter快速且幂等。您的随机颜色不应在每次出现$digest时刷新cycle@NewDev,我同意这不是最佳实践,但它是最简单的:
style=“background:{{{color()}}”
。我不知道如何做,否则(它必须是js端,没有css)。这很好。我的意思是无论调用多少次,color()
都应该返回相同的值。如果这不起作用,请创建另一个方法,如lastGeneratedColor()
。我目前的解决方案是:color()
只返回存储在列表中的随机字符串值,而不执行其他操作<代码>返回颜色[Math.floor(Math.random()*colors.length)]我会保持原样。谢谢嗨@JohnStrickler,它似乎不起作用,因为我是在身体元素上做的。这里是我的身体标签:
这个版本也不起作用:
// 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();
}
}
$document.bind('keydown', function ($event) {
if ($event.keyCode == 27) {
$rootScope.sidebar = false;
$rootScope.$digest()
}
});