javascript - 如何从 HTML 中的脚本 block 调用 AngularJS Controller 方法

标签 javascript angularjs

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

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

我认为我可以接受 Controller 中的编码,但我不知道如何正确获取范围并直接从脚本 block 调用方法。

这是我第一次剪辑:

<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”。我现在工作的脚本 block 如下所示:

<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>

最佳答案

我猜你不需要在MyController中定义一个方法来调用HeartbeatService

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

<script type="text/javascript">
    var $injector = angular.element(document.body).injector();
    var service = $injector.get('HeartbeatService');

    window.setInterval(function() {
        if (service.someMethod()) {
            window.location.reload();
        }
    }, 60000)
</script>

关于javascript - 如何从 HTML 中的脚本 block 调用 AngularJS Controller 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42258648/

相关文章:

javascript - 使用 AngularJS 从 JSON 数据库中获取数据并将其显示到文本框

javascript - 使用带 Angular ng-options 显示带有键和值的选择选项并设置默认值

javascript - Discord JS 音乐机器人的问题

javascript - 我无法使用正则表达式将文本转换为标签

javascript - 上一个脚本完成后运行 jQuery 代码

javascript - Angular JS文件上传: ng-accept does not work properly

javascript - AngularJS - 使用 angular.forEach 和 console.log 循环数组是不可预测的

javascript - 使用目标 ="_blank"/window.open() 打开新窗口/标签时如何防止 sessionStorage 被继承?

javascript - 关闭 div onclick <a> jquery

javascript - AngularJS中根据字段值绑定(bind)Checkbox