Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将php响应存储在angularjs服务中,然后将它们放入控制器中_Php_Angularjs_Angularjs Service_Angularjs Controller_Deferred - Fatal编程技术网

将php响应存储在angularjs服务中,然后将它们放入控制器中

将php响应存储在angularjs服务中,然后将它们放入控制器中,php,angularjs,angularjs-service,angularjs-controller,deferred,Php,Angularjs,Angularjs Service,Angularjs Controller,Deferred,所以,我对angularjs是新手。我想使用MVC结构。所以,我想把来自php的响应存储在我的服务中,然后在我的控制器中使用它们 服务: (function () { angular.module('dataService').service("incidentService", function ($http) { var Data = []; return ({ getData: __getData }); function __ge

所以,我对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);
 }
})();

通过这种方式,问题是在更新我的服务中的数据数组时,我的数据集没有得到更新。我知道我们可以向控制器返回延迟承诺来获取数据,但是我们可以先在服务中设置数据,然后使用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()

获取数据即可发布服务和控制器的完整定义。上面的代码中有一些基本的缺陷,最好能全部看到。另外,不确定您使用的Angular版本是什么,但success已被弃用。像下面一样使用。非常感谢。getMonthlyData()是一个输入错误。它应该是getData()。我还有一个问题。我应该如何存储在服务中获得的数据。我正在将其存储在data属性中。返回$q.when(service.Data)在后续调用中使用缓存数据。在这两种情况下,它都包装在一个承诺中,因此在控制器中,您可以使用incidentService.getData()。然后(…)引用它,或者在您知道必须调用该服务的实例中,您只需引用incidentService.data。谢谢。如果我想在我的服务中存储多个阵列,该怎么办?您基本上可以使用相同的方法,只需为每个阵列使用不同的属性名称,而不是我在.NVM上面使用数据的位置。我修好了。我想我有点明白你的意思。通过返回承诺,我们可以节省http调用的数量。您的服务变量用于检查我们是否进行http调用。