gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 05:00:16 26 4
gpt4 key购买 nike

我有一个使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com