Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当听箭头键被按下时,我是否应该在<;车身>;或<;html>;_Javascript_Angularjs - Fatal编程技术网

Javascript 当听箭头键被按下时,我是否应该在<;车身>;或<;html>;

Javascript 当听箭头键被按下时,我是否应该在<;车身>;或<;html>;,javascript,angularjs,Javascript,Angularjs,我有: 两者都有效。然而,在或上做这件事会更好吗?还是一样?这取决于你想要实现什么-根据你的例子,我不会说: 没有数据传递,因此您正在查找全局$broadcast事件,然后在应用程序中的某个位置侦听回调。如果您希望这样做,我强烈建议您在控制器内使用$watch,并注意型号更改: <html data-ng-keydown="$broadcast('keydown',$event)"> <body data-ng-keydown="$broadcast('keydown',

我有:



两者都有效。然而,在
上做这件事会更好吗?还是一样?

这取决于你想要实现什么-根据你的例子,我不会说:

没有数据传递,因此您正在查找全局
$broadcast
事件,然后在应用程序中的某个位置侦听回调。如果您希望这样做,我强烈建议您在控制器内使用
$watch
,并注意型号更改:

<html data-ng-keydown="$broadcast('keydown',$event)">

<body data-ng-keydown="$broadcast('keydown',$event)">
这将考虑任何事件,并观察模型更改,这意味着您不局限于键入事件


在开发“角度方式”时,我建议您忘记DOM,专注于您的数据和
$scope
——这样您就可以严格控制正在发生的事情,并通过全局
$broadcast
事件来避免污染您的应用程序。Angular将为您轻松地操作DOM,因此相应地设置您的
$scope
,让它完成繁重的工作。

无论如何,事件都会冒泡,从body到html只有一步之遥。所以差异并不显著。我不确定观察模型的变化是否会有所帮助。我想观察向右或向左箭头的按下。@Melina如果您没有绑定模型或需要控制器,那么我建议您编写常规JavaScript来实现您的目标。许多开发人员尝试将他们所有完美的代码转换为“角度代码”,这会使事情进一步复杂化(更不用说浪费时间并导致未来版本中的破坏性更改)。我相信保持简单,所以如果你真的不需要一个基于MVC的解决方案,只需要像没有Angular一样使用JavaScript。我的应用程序已经有99%的Angular了。我只需要一种方法来捕捉用户单击屏幕上的右键或左键。我确实遇到了一个问题,因为当我检查控制器中的$event值时,我看不到单击了哪个键代码?@Melina如果您不使用左/右键就可以克服它,那么您就可以设置一个更具可扩展性的解决方案-设备不像桌面那样具有左/右按钮。感谢您的应用可能不需要支持设备,但它确保了未来的可扩展性。如果设置为使用
$broadcast
,那么我会选择
标记,因为它在DOM树的下方比
更远。祝你好运
$scope.$watch('myModel', function() {
  // callback when changed
});