gpt4 book ai didi

AngularJS 轮询服务不连续更新 Controller

转载 作者:行者123 更新时间:2023-12-03 08:23:49 24 4
gpt4 key购买 nike

我正在尝试使用轮询服务不断更新 Controller 。我的服务正在运行,并且可以验证它正在轮询并正确获取新数据。我无法工作的是更新使用该服务的 Controller 。

这是我的:

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 永远不会使用轮询服务返回的当前对象进行更新。我的猜测是服务中的返回语句不正确。它只返回在服务顶部声明的大部分为空的对象。

如何让服务在 http 响应返回时自动更新 Controller ?

最佳答案

您必须返回 一些数据 - 不要将 timeout 逻辑放在服务中 - 应该包含在 Controller 代码中。您可以重构以处理 Controller 中的响应和服务中包含的数据调用:

cadApp.controller('statsController', function ($scope, $timeout, DashboardStats) {
pollData();

function pollData() {
DashboardStats.poll().then(function(data) {
$scope.data = data;
$timeout(pollData, 10000);
});
}
});

cadApp.factory('DashboardStats', function ($http, $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
}
});

关于AngularJS 轮询服务不连续更新 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27745129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com