这是一个形成不良的问题,但我还没有足够的知识来表达它。我还继承了一个混乱的项目,所以我不能给出很多示例代码。我在$scope.$back
中存在的控制器testCtrl
中定义了一个函数angular.module('messyApp')
。这是在单独的js页main.js
。
我想在加载角度内容后触发onkeydown
事件时,从标题中的普通javascript脚本调用此函数。我有一个想法,我需要在之后调用angulars $apply
函数,但我无法弄清楚如何访问任何这些函数,因为我得到错误它们是未定义的。
我正在使用$routeProvider
来指定testCtrl
控制器。这里有一些可能有用的代码;
<html>
<head>
...loads of scripts and stuff...
<script type="text/javascript">
function keyFunc(e) {
switch (e.keyCode) {
case 37:
console.log('left');
break;
case 38:
console.log('up');
break;
case 39:
console.log('right');
break;
case 40:
console.log('down');
break;
}
$rootScope.$next(); // angular function im trying to trigger
}
</script>
</head>
<body ng-app="messyApp" onkeydown="keyFunc(event)">
...tons more scripts...
</body>
</html>
角度函数$back()
使用
<a ng-click="$back()"><div class="icon" id="backicon"><img src="back.png" /></div></a>
所以,如果它真的来了,我可以接受一个甚至更多的 hacky解决方案的js触发这个超链接(这会触发角度,我假设)。
答案 0 :(得分:2)
如果您尝试访问$rootScope
上定义的功能,则必须在html中使用$root.
正确引用该功能。例如:<a ng-click="$root.$back()"></a>
然而,还有许多其他问题。我真的建议使用ui-router和基于状态的导航,因为它会让你的生活更轻松。此外,尽可能避免使用$ rootScope。对于绑定到键,最好使用angular指令。例如,如果你想绑定到回车键,你的代码将在指令的链接函数中看起来像这样:
element.bind("keydown keypress", function (event) {
if(event.which === 13) {
doSomething();
}
}
答案 1 :(得分:1)
你最好的选择是添加这样的东西:
<body ng-app="messyApp" ng-keydown="$next()">