我有一个使用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>
答案 0 :(得分:1)
我猜您无需在console.log
中定义方法,只需拨打MyController
即可。
相反,使用HeartbeatService
获取服务实例并调用其方法
injector