我有一个计时器,会定期重新提交页面。有角色的方法吗?
现在我只是在脚本中提交表单:
<script type="text/javascript" defer="defer">
window.setTimeout( function () {
document.getElementById( "srchForm" ).submit();
}, 300000 ); //5 min
</script>
<form id="srchForm" ng-controller="OutageViewController" ng-submit="loadData(0)">
<p id="div_srchForm"> ....</p>
<button id="btnReload" type="submit" >Submit</button>
</form>
但它会给我404错误状态:
404 - 找不到文件或目录。 您要查找的资源可能已被删除,名称已更改或暂时不可用
答案 0 :(得分:1)
使用$ interval service来安排一个重复执行的函数,其间的时间间隔为。
使用$ interval服务每3秒安排一次函数调用的示例:
var app = angular.module('MyApp', []);
app.controller('MainCtrl', function($scope, $interval) {
$scope.loadData = function() {
console.log("loadData - Interval occurred");
};
$interval(function() {
$scope.loadData();
}, 3000);
});
<form id="formX" ng-controller="MainCtrl" ng-submit="loadData(0)">
<p id="div_srchForm"> ....</p>
<button id="btnReload" type="submit">Submit</button>
</form>
答案 1 :(得分:0)
我找到了一种非Angular方法来解决ng-submit处理程序:
看起来我无法在回调中调用form.submit。当我这样做时,他们无法“看到”ng-submit,当它抱怨没有找到“资源”这个页面本身时,它就在我打电话的地方失去了我!我的解决方法是连接到ng-submit,
现在不是在回调中执行form.submit,而是单击提交按钮,这只是原始的js,但它完成了工作!
<script type="text/javascript" defer="defer">
window.setTimeout( function () {
document.getElementById( "btnReload" ).click();
//window.location.reload();
}, 300000 ); //5 min
</script>
由于设置提交范围的方式,该按钮激活了ng-submit。只是不要问我为什么单击按钮工作但表单提交无效!
毕竟,我仍然想知道Angular Way这样做,而不是我原始的js !!
答案 2 :(得分:0)
我宁愿问你为什么要在第一时间模拟按钮点击。正如其他人所暗示的那样,浏览器自动化作为用户体验通常是一个糟糕的选择,并反映出您的软件设计组织不佳。我建议使用Angular中已有的$ timeout来代替控制器。这不仅将你的前端逻辑放在它所属的位置,在控制器中,而且还为你提供了一个干净的拆卸机制,这样你的计时器就不会继续我运行如果控制器没有激活(并且阻止你写另一个hack到缓解那个)。