在 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()

获取数据