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

时间:2014-03-12 13:14:19

标签: javascript jquery arrays json angularjs

我正在尝试找到一种方法来最小化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中的各个位置 使用路由和部分来调用StandingsCtrl进行演示。带有ng-view的div位于MainCtrl

的body元素内

1 个答案:

答案 0 :(得分:1)

MainCtrl的$scope与StandingsCtrl中的$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;
            });
        }

    });