如何从HTML中的脚本块调用AngularJS控制器方法

时间:2017-02-15 19:43:54

标签: javascript angularjs

我有一个使用AngularJS(Angular1)的小型SPA。我需要每隔一段时间刷新整个页面。 SPA从REST调用获取数据,但页面刷新是为了偶尔更改应用程序。使用“元刷新”标签基本上可以工作,但它有一个稍微烦人的症状,因为当它无法到达网络(例如在工作和家庭之间旅行)时,它有时会尝试刷新页面,因此它会出现错误州。当我连接时,手动刷新页面很容易,但我希望它只是更聪明一点。

因此,我在控制器中定义了一个“HeartbeatService”工厂方法,而不是“meta refresh”标签,并在控制器中定义了一个方法来调用该方法,目的是直接从脚本调用此控制器方法在我的HTML页面中阻止,以确定是否可以安全地重新加载页面(当我的间隔计时器触发时)。

我认为我对控制器中的编码没问题,但我无法弄清楚如何正确获取范围并直接从脚本块调用该方法。

这是我的第一次切入:

<body data-ng-controller="MyController">
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-animate.js"></script>
    <script type="text/javascript" src="js/myMod.js"></script>
    <script type="text/javascript" src="js/myApp.js"></script>
    <script type="text/javascript">
        window.setInterval(function() {
            if (angular.element($('#MyController')).scope().heartbeat()) {
                window.location.reload();
            }
        }, 60000)
    </script>

我尝试在“angular.element()”调用上设置断点(firebug),因此我可以尝试从控制台调用此变体。到目前为止,我还没有找到任何有用的东西。

更新

提供的答案有助于提及“document.body”,这意味着我没有必须设置“id”。我现在正在工作的脚本块看起来像这样:

<script type="text/javascript">
    window.setInterval(function() {
        // Call controller method to call heartbeat service.
        if (angular.element(document.body).scope().heartbeat()) {
            window.location.reload();
        }
    }, 900000)
</script>

1 个答案:

答案 0 :(得分:1)

我猜您无需在console.log中定义方法,只需拨打MyController即可。

相反,使用HeartbeatService获取服务实例并调用其方法

injector