AngularJS轮询服务不会持续更新控制器
发布时间:2020-12-17 07:08:37 所属栏目:安全 来源:网络整理
导读:我正在尝试使用轮询服务连续更新控制器.我有服务工作,可以验证它正在轮询和正确获取新数据.我无法工作的是更新使用该服务的控制器. 这是我有的: cadApp.controller('statsController',function ($scope,DashboardStats) { $scope.data = DashboardStats.dat
|
我正在尝试使用轮询服务连续更新控制器.我有服务工作,可以验证它正在轮询和正确获取新数据.我无法工作的是更新使用该服务的控制器.
这是我有的: cadApp.controller('statsController',function ($scope,DashboardStats) {
$scope.data = DashboardStats.data.response;
console.log(JSON.stringify(DashboardStats.data.response));
});
cadApp.run(function (DashboardStats) { });
cadApp.factory('DashboardStats',function ($http,$timeout) {
$http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
var data = { response: {},calls: 0 };
var url = "Ajax/CADAjax.aspx";
var params = { "Command": "GetDashboardStats" };
var poller = function () {
$http.post(url,Object.toparams(params))
.then(function (responseData) {
data.response = responseData.data[0];
// This is working
console.log(JSON.stringify(responseData.data[0]));
data.calls++;
$timeout(poller,10000);
});
};
poller();
return {
data: data
};
});
UI永远不会使用轮询服务返回的当前对象进行更新.我的猜测是服务中的return语句不正确.它只返回在服务顶部声明的大多数空对象. 每当http响应返回时,如何让服务自动更新控制器? 解决方法
你必须返回一些数据 – 并且不要将超时逻辑放在服务中 – 应该包含在控制器代码中.您可以重构以处理控制器中的响应以及服务中包含的数据调用:
cadApp.controller('statsController',$timeout,DashboardStats) {
pollData();
function pollData() {
DashboardStats.poll().then(function(data) {
$scope.data = data;
$timeout(pollData,10000);
});
}
});
cadApp.factory('DashboardStats',$timeout) {
$http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
var url = "Ajax/CADAjax.aspx";
var params = { "Command": "GetDashboardStats" };
var data = { response: { },calls: 0 };
var poller = function () {
return $http.post(url,Object.toparams(params)).then(function (responseData) {
data.calls++;
data.response = responseData.data[0];
return data;
});
};
return {
poll: poller
}
});
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
