在 angularjs 服务中存储 php 响应,然后在控制器中获取它们
store php response in angularjs service, then get them in controller
所以,我是 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);
}
})();
通过这种方式,问题是当我的服务中的数据数组更新时,我的数据集没有得到更新。我知道我们可以 return 向控制器延迟承诺以获取数据,但是我们可以先在服务中设置数据,然后使用 get 方法使用它们吗?
好的,我认为这不起作用的最大问题是因为您分配给了 $http 调用 nData 返回的数据,而不仅仅是数据。
下一个问题是服务上没有定义 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()
获取数据
所以,我是 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);
}
})();
通过这种方式,问题是当我的服务中的数据数组更新时,我的数据集没有得到更新。我知道我们可以 return 向控制器延迟承诺以获取数据,但是我们可以先在服务中设置数据,然后使用 get 方法使用它们吗?
好的,我认为这不起作用的最大问题是因为您分配给了 $http 调用 nData 返回的数据,而不仅仅是数据。
下一个问题是服务上没有定义 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()