我知道有一些类似的问题,但我对任何答案都没有成功,没有一种情况看起来完全相似。我对Angular很陌生,我知道这里的整个过程并不是最优的,但我觉得我已经接近完成至少一个可以改进的工作原型了:
我正在尝试创建一个在服务器上按计划执行脚本的应用程序,因此在后台我们有以下代码发送请求以运行计划每5秒运行一次的所有文件。脚本执行并更新mongo数据库 - 每个"测试"有一系列"结果"。每次执行脚本时,都会出现一个新的"结果"创建并推送到test.results数组。
public static void weboscio(String args[]) {
home something = new something();
something.web();
new something().warning();
在Angular端,有一个页面显示test.results中的所有结果。当页面首次加载时,它会查找当前测试,并将其作为状态参数:
var interval = 5000;
setInterval(function() {
request.get(
'http://localhost:3000/tests/run/5000',
function (error, response, body) {
if (error) { return next(err) }
}
);
}, interval);
呈现视图:
// The apps state, displays the selected "test", and lists results for the test.
.state('tests', {
url: '/tests/{id}',
templateUrl: '/tests.html',
controller: 'TestsCtrl',
resolve: {
test: ['$stateParams', 'tests', function($stateParams, tests) {
return tests.get($stateParams.id);
}]
}
})
除了我无法手动刷新页面而无法更新视图外,所有这些都运行良好。现在我只想在控制器中创建一个类似的计时器,它按计划重新加载测试参数。 (即现在,如果更新恰好在添加新结果时发生并不重要,我只希望视图定期更新新测试。)我最接近的似乎是:
<script type="text/ng-template" id="/tests.html">
<div class="page-header">
<h1>{{test.name}} | Results</h1>
</div>
<div ng-repeat="result in test.results">
<h4>{{result.timestamp}} | <span ng-class="result.passed"}">{{result.passed}}</span></h4>
<h5>Output:</h5>
<p style="white-space: pre;">{{result.output}}</p> <!--white-space:pre to preserve formatting (ie \n's)-->
<h5 style="color:red";>Errors:</h5>
<p style="white-space: pre;">{{result.error}}</p>
</div>
<!-- ... -->
所以我试图只是做一个新的get请求来从db中检索最新数据,该数据应该包含任何新添加的结果&#39;。我没有收到任何错误,但显示的当前结果列表消失了,一旦此代码运行,我就没有数据显示在视图中。
感谢任何帮助。