29

我开始使用 AngularJS 进行开发。我很困惑这是否是在我的部分视图之间传递数据的正确设计。

现在我有一个加载器页面,我在其中做一些请求。

function PeopleController($scope,$http,$location){
    $http.get('/location/-79.18925/43.77596').
    success(function(data){
      $scope.savePeopleResponse(data);
      $location.url('/test');
    });
}

然后在为 /test 加载的视图中

我只是打电话

<div ng-controller="resultController">
    <div class="blueitem">{{getResultForPeople()|json}}</div>
</div>

[结果控制器]

    function resultController($scope){
      $scope.getResultForPeople = function(){
     return $scope.getPeopleResponse();
    }
}

并且 savePeopleResponse 和 getResultForPeople 被“缓存”在 rootScope 中

app.run(function($rootScope) {
  var peopleResponse = {};
  $rootScope.savePeopleResponse = function(data) {
   peopleResponse = data;
   console.log(data);
  }

  $rootScope.getPeopleResponse = function(){
    return peopleResponse;
  }
});

现在您可以看到,如果这个应用程序变得越来越大,这将变得非常混乱。处理数据以使其在控制器之间持久存在的最佳方法是什么?

4

1 回答 1

55

您可以通过创建自己的服务来跨控制器保存数据,如本博客中所述。你也可以参考这个问题

在您的情况下,您可以将您的savePeopleResponseand移动getPeopleResponse到服务中,然后将该服务注入您想要访问它的任何控制器中。

angular.module('myApp', [])
    .factory('peopleService', function () {
        var peopleResponse = {};

        return {
            savePeopleResponse:function (data) {
                peopleResponse = data;
                console.log(data);
            },
            getPeopleResponse:function () {
                return peopleResponse;
            }
        };
    });

使用您的控制器是这样的:

function resultController ($scope, peopleService) {
    $scope.getResultForPeople = peopleService.getPeopleResponse;
}

使用此代码示例,请确保您包括ng-app="myApp"

于 2012-09-25T00:44:21.477 回答