如何从定时器回叫中激活ng-submit?

时间:2016-07-13 20:01:21

标签: angularjs

我有一个计时器,会定期重新提交页面。有角色的方法吗?

现在我只是在脚本中提交表单:

<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 - 找不到文件或目录。 您要查找的资源可能已被删除,名称已更改或暂时不可用

3 个答案:

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

https://plnkr.co/edit/yqMW9ZENoqZwfDtqlsTy

答案 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到缓解那个)。