Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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
Javascript angularjs在填充数据之前清空数组?_Javascript_Jquery_Arrays_Json_Angularjs - Fatal编程技术网

Javascript angularjs在填充数据之前清空数组?

Javascript angularjs在填充数据之前清空数组?,javascript,jquery,arrays,json,angularjs,Javascript,Jquery,Arrays,Json,Angularjs,我试图找到一种方法来最小化jsonp请求,因为angular不会缓存这些请求。我的方法是将每个控制器中的空数组设置为一个主控制器,该主控制器在连接到主体时加载一次。之后,我将检查数组是否为空,是否为空,然后使用服务并返回json。 我现在的问题是,由于某种原因,我不理解在服务调用之外检查时数组是空的 示例代码 angular.module('Feed.controllers', []) .controller('MainCtrl', function($scope) { func

我试图找到一种方法来最小化jsonp请求,因为angular不会缓存这些请求。我的方法是将每个控制器中的空数组设置为一个主控制器,该主控制器在连接到主体时加载一次。之后,我将检查数组是否为空,是否为空,然后使用服务并返回json。 我现在的问题是,由于某种原因,我不理解在服务调用之外检查时数组是空的

示例代码

angular.module('Feed.controllers', [])
  .controller('MainCtrl', function($scope)
  {
    function getYear()
    {
      var currentDate = new Date();
      return currentDate.getFullYear();
    }
    $scope.currentYear = getYear();
    $scope.StandingsList = [];

  })
  .controller('StandingsCtrl', function($scope, APIservice, $routeParams)
  {
    console.log($scope.StandingsList.length); // returns 0

    if ($scope.StandingsList.length === 0)
    {
      APIservice.getSomtehing().success(function (response)
      {
          $scope.StandingsList = response.jsonData;
          console.log($scope.StandingsList.length); // returns total entries
      });
    };

    console.log($scope.StandingsList.length); // returns 0

  })
MainCtrl位于body标记中,因为我正在使用currentYear来标记HTML中的各个位置
standingstrl是使用routes和partials进行表示调用的。带有ng视图的div位于MainCtrl的body元素内。MainCtrl的
$scope
与standingstrl中的
$scope
不同,您可能需要执行类似操作以在控制器之间共享数据

angular.module('Feed.controllers', [])
    .factory('Standings', function() {
        var list = [];
        return {
            save: function(data) { /*push data into list*/ },
            list: list
        }
    })
    .controller('MainCtrl', function ($scope, Standings) {
        function getYear() {
            var currentDate = new Date();
            return currentDate.getFullYear();
        }

        $scope.currentYear = getYear();
        $scope.StandingsList = Standings.list;
    })
    .controller('StandingsCtrl', function ($scope, APIservice, Standings) {
        console.log(Standings.list.length); // returns 0

        if (Standings.list.length === 0) {
            APIservice.getSomething().success(function (response) {
                Standings.save(response.jsonData);
                $scope.StandingsList = response.jsonData;
            });
        }

    });

不要在控制器中进行本地缓存,而是在服务中进行本地缓存。。。。数组为空的原因是因为每个控制器都实例化了新的
$scope
,所以您没有指向同一个变量如果我没有指向同一个变量,那么为什么如果我从MainCtrl中删除该变量,会出现错误:$scope.StandingsList未定义,这是正确的。我不确定“删除”变量是什么意思,但两个控制器不共享任何
scope
变量,只有当它们是
rootScope
变量时,两个控制器才会继承它们,因为所有
scope
都是
rootScope
的后代,我的意思是如果我删除行$scope.StandingsList=[]; 在MainCtrl中,我得到了未定义的错误,这意味着standingstrl使用MainCtrl中的StandingsList。我错了吗?你能编一把小提琴吗?当我只看到定义而不看到html中的用法时,很难判断发生了什么