2016-07-13 39 views
0

我有一個定時器,會間隔重新提交頁面。有沒有一種角度來做到這一點?如何從定時器回調中激活ng-submit?

現在我只是提交表單的腳本里面:

<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

我建議一個不同的方法 - 使用'$超時'在控制器()。看起來你所要做的只是刷新正在顯示的數據,並且從控制器而不是視圖這樣做似乎更合適。更好的做法是實施類似SignalR的功能,以便在有新數據顯示時將更新的數據推送到連接的客戶端。 – Lex

+0

實際上ng-submit不是'submit'提交:它實際上是一個AJAX調用的函數,它部分更新表單,所以它不像重新加載整個表單!所以在回調中使用提交嘗試執行ng-submit是錯誤的。我必須解決它。見下面我的發現。 –

+0

好的,但我仍然認爲從控制器做到這一點,而不是在視圖上使用一些JavaScript黑客更好。 – Lex

回答

0

我已經找到了無棱角的方式來解決得到了NG-提交處理程序暫時不可用:

外貌就像我不能在回調中調用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!

0

我想問你爲什麼試圖首先模擬按鈕點擊。正如其他人所暗示的那樣,瀏覽器自動化作爲用戶體驗通常是一個糟糕的選擇,並且反映出軟件設計中的組織不佳。我建議使用Angular中已經提供的$ timeout來替代控制器。這不僅會將前端邏輯放置在控制器所屬的位置,而且還會爲您提供乾淨的拆卸機制,因此您的計時器不會繼續運行,如果控制器未處於活動狀態(並且阻止您編寫其他黑客程序緩解)。

1

使用$ 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

+0

我遠離使用角度超時的原因是因爲它只發生一次。現在我知道爲什麼。我必須使用$間隔重複過程! –