在angularjs服务中存储php响应,然后在控制器中获取它们

时间:2017-06-14 17:16:44

标签: php angularjs angularjs-service angularjs-controller deferred

所以,我是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方法来使用它们吗?

1 个答案:

答案 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()

获取数据