从普通的javascript中调用角度函数

时间:2014-10-07 16:26:21

标签: javascript angularjs

这是一个形成不良的问题,但我还没有足够的知识来表达它。我还继承了一个混乱的项目,所以我不能给出很多示例代码。我在$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触发这个超链接(这会触发角度,我假设)。

2 个答案:

答案 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()">