所以,我是angularjs的新手。我想使用MVC结构。所以,我想在我的服务中存储来自php的响应,然后在我的控制器中使用它们。
服务:
(function () {
angular.module('dataService').service("incidentService", function ($http) {
var Data = [];
return ({
getData: __getData
});
function __getData() {
return Data;
}
function __setData($http, $q) {
var defer = $q.defer();
$http.get('PHP/NAME.php',{cache : 'true'}).
success(function(data){
Data = data;
console.log(Data);
defer.resolve(data);
defer.promise.then(function(data){
Data = data;
console.log(Data);
});
});
}
})})();
控制器:
(function () {
angular.module('app')
.controller('Ctrl', Ctrl);
/** @ngInject */
function Ctrl($scope, $http, $q,baConfig, incidentService) {
incidentService.setData($http,$q)
var DataSet = incidentService.getData();
console.log(DataSet);
}
})();
通过这种方式,问题是我的dataSet在我的服务中的数据数组更新时没有得到更新。我知道我们可以向控制器返回延迟承诺来获取数据,但是我们可以先将数据设置为服务,然后使用get方法来使用它们吗?
答案 0 :(得分:0)
好吧,我认为为什么这不起作用的最大问题是因为你将$ http调用返回的数据分配给nData而不仅仅是Data。
下一个问题是服务上没有定义getMonthlyData方法。
话虽如此,这看起来过于复杂。
您的服务应该更像这样:
(function () {
angular.module('dataService').service("incidentService", function ($http,$q) {
var service
service.getData = __getData()
return service
function __getData() {
if (!service.Data) {
return $http.get('PHP/NAME.php',{cache : 'true'}).then( function(data) {
service.Data = data
return $q.when(service.Data)
})}
else {
return $q.when(service.Data)
}
}
})})();
然后在您的控制器中,您只需通过incidentService.getData()